اعداد اÙ٠را Ø®Ø±ÙØ¬Û بدÙÛØ¯
ÛÚ© عدد صØÛØ Ø¨Ø²Ø±Ú¯ تر از 1 زÙ
اÙÛ Ø§Ù٠صدا زد٠Ù
Û Ø´ÙØ¯ Ú©Ù ÙØªÙا٠آ٠را Ø¨Ù ÙØ± ÚÛØ²Û بدÙ٠اÛÙک٠باÙÛ Ù
Ø§ÙØ¯Ù داشت٠باشد ØªÙØ³ÛÙ
کرد ب٠جز 1 Ù Ø®ÙØ¯Ø´.
Ø¨Ù Ø¹Ø¨Ø§Ø±ØªÛ Ø¯ÛÚ¯Ø±Ø n > 1 ÛÚ© عدد اÙ٠است اگر ÙØªÙØ§ÙØ¯ با ÙÛÚ ÚÛØ²Û ب٠جز 1 Ù n Ø¨Ù ØµÙØ±Øª Ù
ساÙÛ ØªÙØ³ÛÙ
Ø´ÙØ¯.
Ø¨Ø±Ø§Û Ù
Ø«Ø§ÙØ 5 ÛÚ© عدد اÙÙ Ø§Ø³ØªØ ÚÙÙ ÙÙ
Û ØªÙØ§Ùد بدÙ٠باÙÛ Ù
Ø§ÙØ¯Ù ب٠2Ø 3 Ù 4 ØªÙØ³ÛÙ
Ø´ÙØ¯.
Ú©Ø¯Û Ø¨ÙÙÛØ³Ûد ک٠اعداد اÙ٠را در باز٠2 تا n Ø®Ø±ÙØ¬Û Ø¨Ø¯ÙØ¯
Ø¨Ø±Ø§Û n = 10 ÙØªÛج٠7 Ø5 Ø3 Ø2 Ø®ÙØ§Ùد Ø¨ÙØ¯.
ضÙ
ÛÙ
Ù: کد Ø¨Ø§ÛØ¯ Ø¨Ø±Ø§Û ÙØ± Ù
ÙØ¯Ø§Ø± n کار Ú©ÙØ¯Ø Ù٠اÛÙÚ©Ù Ø¨Ø±Ø§Û Ù
ÙØ¯Ø§Ø± Ù
Ø´Ø®ØµÛ ØªÙØ¸ÛÙ
شد٠باشد.
There are many algorithms for this task.
Letâs use a nested loop:
For each i in the interval {
check if i has a divisor from 1..i
if yes => the value is not a prime
if no => the value is a prime, show it
}
The code using a label:
let n = 10;
nextPrime:
for (let i = 2; i <= n; i++) { // for each i...
for (let j = 2; j < i; j++) { // look for a divisor..
if (i % j == 0) continue nextPrime; // not a prime, go next i
}
alert( i ); // a prime
}
Thereâs a lot of space to optimize it. For instance, we could look for the divisors from 2 to square root of i. But anyway, if we want to be really efficient for large intervals, we need to change the approach and rely on advanced maths and complex algorithms like Quadratic sieve, General number field sieve etc.