簡體   English   中英

為什么每個數都是素數?

[英]Why is every number prime?

這是我的代碼:

from time import sleep

n = 5
k = 2
found_factors = 0

while True:
   kinn = n/k

    if (n == k) and found_factors == 0:
        print("Found prime:", n)
        n += 1
        k = 2
        found_factors = 0
        sleep(0.1)
        continue
    elif (n == k) and found_factors > 0:
        n += 1
        k = 2
        found_factors = 0
        continue


    if isinstance(kinn, int) == True:
        found_factors += 1

    k += 1

該程序旨在查找素數,從 5 開始。但出於某種原因,它輸出每個數為素數!

為什么會這樣?

n/k總是返回一個浮點數,即使k除以n ,所以例如6/23.0這是一個float ,並且不是int的實例,但是,還有另一種方法來檢查一個數字是否是一個整數,使用nk之間的模運算符%來獲得除法的余數:

if n % k == 0:
        found_factors += 1

通過在您的程序中替換它,它輸出:

Found prime: 5
Found prime: 7
Found prime: 11
Found prime: 13
Found prime: 17
Found prime: 19
Found prime: 23
Found prime: 29
Found prime: 31
Found prime: 37
Found prime: 41
Found prime: 43
Found prime: 47
Found prime: 53
Found prime: 59
Found prime: 61
Found prime: 67
# ........ more
from time import sleep

n = 5.0 # change one of n/k to float so division will not truncate
k = 2
found_factors = 0

while True:
   kinn = n/k # note: in python 2 dividing ints truncates the remainder

    if (n == k) and found_factors == 0:
        print("Found prime:", n)
        n += 1
        k = 2
        found_factors = 0
        sleep(0.1)
        continue
    elif (n == k) and found_factors > 0:
        n += 1
        k = 2
        found_factors = 0
        continue

    # kinn used to truncate to an int, which is why this statement was always hit.
    # By changing the type of n to float, we test for remainder of n/k instead
    if n % k == 0:
        found_factors += 1

    k += 1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM