Итак, я решил изучить python в этот уик-энд, и я начал с моего приветствия по умолчанию, главного решателя. Этот код не должен работать... Но по какой бы то ни было причине (для чисел 5 и выше).
#!/usr/bin/python
a = 2
while a < 65535:
c = 0
a = a + 1
b = 2
while b != a:
if a % b == 0:
#print a, "is not prime. LCD is ", b
break
b = b + 1
if a - 1 == b: c = 1
if c == 1: print a, " is prime"
Рядом с последним условным всегда должно быть значение false, но все-таки a -1 == b для всех простых чисел 5 и выше.
Может кто-то указать на эту ошибку, потому что я, очевидно, пропустил что-то легко описанное.
Ответы ниже.
Если a
не является простым, он имеет как минимум два собственных делителя, а один из них должен быть меньше квадратного корня (или оба являются квадратным корнем). Если b
достигает sqrt(a)+1
, то a
должно быть простым. Поэтому, если b
достигает a - 1
, вы можете быть уверены, что это просто. Вы также можете заменить его на if a - 3 == b
или a / 2
(но это может не работать для меньших простых чисел).
Кажется, это работает для меня; после изменения 65535
до 1024
и удаления части " is prime"
(так что я могу запустить результаты прямо в factor(1)
), вывод выглядит следующим образом:
$ ./prime.py | xargs -n1 factor > /tmp/list ; wc -l list
170 list
$ head list
5: 5
7: 7
11: 11
13: 13
17: 17
19: 19
23: 23
29: 29
31: 31
37: 37
Вы уверены, что вы copy- and- вставили его правильно? Я нахожу, что one- пространство отступает от жалкого чтения, и, возможно, вы скопировали mis- или mis-?