这种优质筛的实施是否适用于所有质数?或者它只是一个侥幸(Python)

时间:2016-06-07 18:32:19

标签: python primes sieve

p = 2
for i in range(3,10000000000000000,2):
    if p%i >= 1:
        print(i)
        p = p*(i*i)

我已经对它进行了测试,它似乎至少在前100个素数上工作,它会无限期地准确地返回素数吗?(理论上不是字面上的)。

1 个答案:

答案 0 :(得分:1)

您的限制(除了代码正确性,注释已经指出)将基于Python允许的最大整数。事实证明,Python在理论上具有无限的整数精度 - 受内存限制。

https://docs.python.org/2/library/stdtypes.html#numeric-types-int-float-long-complex

  

有四种不同的数字类型:普通整数,长整数,[...]。普通整数(也称为整数)是在C中使用long实现的,它给出了至少32位的精度(sys.maxint总是设置为当前平台的最大普通整数值,最小值是-sys.maxint - 1)。长整数具有无限精度。 [...]

因此,如果你使用sys.maxint并增加它,你仍然会得到一个整数:

In [6]: sys.maxsize ** 10
Out[6]: 4455508415646675013373597242420117818453694838130159772560668808816707086990958982033203334310070688731662890013605553436739351074980172000127431349940128178077122187317837794167991459381249L

一旦超出sys.maxsize,将会有性能下降。