Цикл Python, который не должен работать, но все равно работает

1

Итак, я решил изучить 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 и выше.

Может кто-то указать на эту ошибку, потому что я, очевидно, пропустил что-то легко описанное.

Ответы ниже.

  • 0
    Я скопировал и вставил это в файл, и он печатает простые числа, как описано.
  • 0
    его действительно трудно читать код ... вы могли бы исправить отступ?
Показать ещё 5 комментариев
Теги:
loops

2 ответа

1
Лучший ответ

Если a не является простым, он имеет как минимум два собственных делителя, а один из них должен быть меньше квадратного корня (или оба являются квадратным корнем). Если b достигает sqrt(a)+1, то a должно быть простым. Поэтому, если b достигает a - 1, вы можете быть уверены, что это просто. Вы также можете заменить его на if a - 3 == b или a / 2 (но это может не работать для меньших простых чисел).

  • 0
    Да, но функционально он достигает решения, поэтому я попытался оставить его в качестве приветственного по умолчанию. Обычно он включает в себя вложенный цикл, поэтому он дает мне достаточно, чтобы начать наносить ущерб некоторым циклам, и математически достаточно хорош, чтобы найти простые числа> 2.
  • 0
    @ Ори - Извини, я не понимаю, что ты имеешь в виду. Во всяком случае, я попытался объяснить, почему «Следующее за последним условное выражение» должно быть справедливо только для простых чисел и простых чисел. Раньше это был вопрос, верно?
Показать ещё 1 комментарий
0

Кажется, это работает для меня; после изменения 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-?

  • 0
    Да, я исправил это, я делал что-то ненужное, основываясь на моем неполном знании языка.
  • 1
    Первоначальная проблема заключалась в том, что это действительно работало.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню