为什么每个数都是素数?
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 一个浮点数,即使 k
除 n
,所以例如 6/2
是 3.0
这是一个float
,并且不是 int
的实例,但是,还有另一种检查数字是否为整数的方法,使用 n
和 n
之间的模运算符 %
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
这是我的代码:
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 一个浮点数,即使 k
除 n
,所以例如 6/2
是 3.0
这是一个float
,并且不是 int
的实例,但是,还有另一种检查数字是否为整数的方法,使用 n
和 n
之间的模运算符 %
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