Функция проверки простого числа неисправна - PullRequest
3 голосов
/ 04 ноября 2011

Я написал функцию для вычисления, является ли число простым, но, как ни старайся, оно просто не может дать правильный ответ.Он также печатает значение n, которое увеличивается.Вот код функции (кстати, в Python):

def isPrime(x):
    for n in range(1, x):
        print n
        if x % n == 0:
            return False
    return True

Если я введу

isPrime(17)

, функция вернет

1
False

Чтоздесь идет не так?

1 Ответ

6 голосов
/ 04 ноября 2011

Каждое число делится на 1 и само по себе .Простое число - это натуральное число, которое не имеет положительных делителей , отличных от , кроме 1 и самого себя.Поэтому, если вы начнете свой цикл for с 1, каждый номер x передаст условие x % 1 == 0 в первой итерации, возвращая False.

Чтобы исправить это, вам нужно начать цикл с 2 вместо 1. Кроме того, в качестве дополнительного примечания, вам просто нужно сделать цикл от 2 до sqrt(x), поскольку, если существует число q > sqrt(x) которая делит x, тогда также должно быть число p = x / q, которое также делит x и p < sqrt(x).

...