Вывод простых чисел
Всем привет! Нужна помощь с задачей на вывод простых чисел. Не могу понять, почему эта функция не выводит 1 и 2.
function printPrime(limit) { var result = [], isPrime = false, number = 1; for (number; number < limit; number++) { for (i = 2; i < number; i++) { if(number%i == 0 && number != i) { isPrime = false; break; } else { isPrime = true; } } if (isPrime) { result.push(number); } } console.log(result); } printPrime(10); |
Maine,
а почему она должна выводить 1 и 2, если в 8 строчке цикл с i = 2 ? |
потому что number = 1
|
Цитата:
|
В результате выдает
[3, 5, 7] |
Maine,
<script> function printPrime(limit) { var result = [], isPrime = false, number = 1; for (number; number < limit; number++) { for (i = 2; i <= number; i++) { if (number % i == 0 && number != i) { isPrime = false; break; } else { isPrime = true; } } if (isPrime) { result.push(number); } } console.log(result); } printPrime(10); </script> https://ru.wikipedia.org/wiki/Простое_число |
Maine,
Если рассматривать такой подход к определению простоты, то не надо проверять делимость на 2, 3 и до самого number. Это лишнее. Достаточно проверять до округленного корня из number. А лучше вообще убрать из рассмотрения проверки четные числа, поэтому делай не number++, а number+=2 А почему не выводит тебе товарищ пояснил |
Написала так. Если поставить number+=2, тогда не выводит 2, но выводит 1 несмотря на то, что i = 2
function printPrime(limit) { var result = [], isPrime = false, number = 1, checkNumber = Math.floor(Math.sqrt(limit)); console.log(checkNumber); for (number; number < limit; number+=2) { for (i = 2; i <= checkNumber; i++) { if(number%i == 0 && number != i) { isPrime = false; break; } else { isPrime = true; } } if (isPrime) { result.push(number); } } console.log(result); } $('#calculate').click(printPrime(500)); |
Maine,
Ща, погодь |
:blink: Просмотров 1,139 Сегодня, 12:03 Сегодня, 15:23 за 3 часа кило просмотров ???
|
Maine,
function printPrime(limit) { var result = [2], // вот) isPrime = false, number = 3, //и вот) checkNumber = Math.floor(Math.sqrt(limit)); console.log(checkNumber); for (number; number < limit; number+=2) { for (i = 2; i <= checkNumber; i++) { if(number%i == 0 && number != i) { isPrime = false; break; } else { isPrime = true; } } if (isPrime) { result.push(number); } } console.log(result); } |
Coriolan161,
Да, действительно :) |
Coriolan161,
может checkNumber формировать для каждого числа? |
рони,
я изначально это и имел ввиду. На моё удивление код автора выдавал правильный result. А так, конечно, корректней function printPrime(limit) { var result = [2], isPrime = false, number = 3, checkNumber; for (number; number < limit; number+=2) { checkNumber = Math.floor( Math.sqrt(number) ); for (i = 2; i <= checkNumber; i++) { if(number%i == 0 && number != i) { isPrime = false; break; } else { isPrime = true; } } if (isPrime) { result.push(number); } } console.log(result); } |
Часовой пояс GMT +3, время: 23:54. |