2011-05-30 22 views
1

因此,我決定在本週末學習python,並開始使用我的默認hello world,主要解決方案。此代碼不應該工作......但不管是什麼原因它(對數字5及更高版本。)Python循環不應該工作,但無論如何

#!/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" 

下一個到最後一個條件應該永遠是假的,但不知怎麼-1 == b對於所有的素數5以上。

有人可以指出這個noob的錯誤,因爲我明顯錯過了一些容易描述的東西。

下面進一步的答案。

+0

我複製並將其粘貼到文件中,並按照所述打印素數。 – 2011-05-30 22:20:00

+0

它真的很難閱讀代碼..你可以修復縮進? – FrEaKmAn 2011-05-30 22:20:10

+0

事實上,對於a = 3',這個條件也是真的嗎?當你用'a = 3'(你第一次做)時,'b = 2'到達那裏。所以基本上它適用於你測試的所有*素數(你不測試2 ...) – 2011-05-30 22:24:42

回答

1

如果a不是素數,它至少有兩個正確的除數,其中一個必須小於平方根(或兩者都是平方根)。如果b達到sqrt(a)+1,則a必須是素數。所以如果b達到a - 1,你可以很確定它是素數。您也可以用if a - 3 == ba/2來代替它(但這可能不適用於較小的素數)。

+0

是的,但功能上它達到了解決方案,這就是爲什麼我試圖保持它作爲你好世界默認。 它通常涉及一個嵌套循環,所以它給了我足夠的開始做一些循環的損害,並且它已經足夠數學來解決質數> 2. – Ori 2011-05-30 22:33:57

+0

@Ori - 抱歉,我不明白你的意思。無論如何,我試圖解釋爲什麼「最後一個條件的旁邊」應該只適用於素數和素數。這曾經是個問題,對吧? – Ishtar 2011-05-30 22:38:16

+0

是的,它現在在那裏。你死定了。 – Ori 2011-05-30 22:39:54

0

它似乎對我有用;改變655351024和去除" 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 

你確定你正確地複製和粘貼嗎?我發現一空間縮進悲慘的閱讀,也許你錯誤複製或錯誤格式?

+0

是的,我修復了它,我做了一些不必要的事情,基於我對語言。 – Ori 2011-05-30 22:28:44

+1

最初的問題是它的確在工作。 – Ishtar 2011-05-30 22:31:02

+0

嘿,現在我看到新的編輯:)得到它。呵呵。 – sarnold 2011-05-30 22:31:05