为什么每个数都是素数?

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 开始的素数。但由于某种原因,它输出的每个数字都是素数!

为什么会这样?

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

n/k 总是 returns 一个浮点数,即使 kn,所以例如 6/23.0 这是一个float,并且不是 int 的实例,但是,还有另一种检查数字是否为整数的方法,使用 nn 之间的模运算符 % k求除法余数:

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