Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么每个数字都是素数?_Python_Primes - Fatal编程技术网

Python 为什么每个数字都是素数?

Python 为什么每个数字都是素数?,python,primes,Python,Primes,这是我的密码: 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) conti

这是我的密码:

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/2
3.0
,它是一个
float
,并且不是
int
的实例,但是,还有另一种方法可以检查数字是否是整数,在
n
k
之间使用模运算符
%
,得到除法的剩余部分:

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
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

Python 2还是3
5/2
不做您认为它在python 2中所做的事情
isinstance(kinn,int)
不测试您认为它测试的东西。如果你想要一个整除性测试,那就是
如果n%k==0
,测试余数。如果你使用的是Python 3,你可能想要
5//2
,你有没有尝试过在调试模式下单步检查你的代码来找出问题所在?没有,float通常不是这样工作的。对于小整数,这可能有效,但对于大整数,则不行。因此,您的答案是w.l.o.g.错误。@MarcusMüller您是对的,我现在更新了我的答案,我使用的是
。is_integer()
@pagie_u。您应该使用
。is_integer()
,它更安全。@pagie_u。不,它不起作用,或者只适用于小数字。同样,浮动不是这样工作的。例如,以
(float(2**112)+0.5)为例。虽然2**112+0.5肯定不是整数,但is_integer()==True
。尝试确定两个整数的比率是否为整数只是为了确定一个整数是否除以另一个整数有点奇怪,因为python对整数有一个模运算符。。。