Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывод простых чисел (https://javascript.ru/forum/misc/61549-vyvod-prostykh-chisel.html)

Maine 23.02.2016 12:03

Вывод простых чисел
 
Всем привет! Нужна помощь с задачей на вывод простых чисел. Не могу понять, почему эта функция не выводит 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);

destus 23.02.2016 12:19

Maine,
а почему она должна выводить 1 и 2, если в 8 строчке цикл с i = 2 ?

Maine 23.02.2016 12:22

потому что number = 1

destus 23.02.2016 12:29

Цитата:

Сообщение от Maine (Сообщение 408918)
потому что number = 1

И что? 17 строчка не сработает, потому что в цикл не зайдет и значение isPrime не поменяется.

Maine 23.02.2016 12:59

В результате выдает
[3, 5, 7]

destus 23.02.2016 13:14

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/Простое_число

Coriolan161 23.02.2016 13:20

Maine,
Если рассматривать такой подход к определению простоты, то не надо проверять делимость на 2, 3 и до самого number. Это лишнее. Достаточно проверять до округленного корня из number. А лучше вообще убрать из рассмотрения проверки четные числа, поэтому делай не
number++
, а
number+=2

А почему не выводит тебе товарищ пояснил

Maine 23.02.2016 13:53

Написала так. Если поставить 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));

Coriolan161 23.02.2016 15:23

Maine,
Ща, погодь

рони 23.02.2016 15:40

:blink: Просмотров 1,139 Сегодня, 12:03 Сегодня, 15:23 за 3 часа кило просмотров ???


Часовой пояс GMT +3, время: 11:34.