这种素数筛的实现是不是适用于所有素数?还是只是侥幸(Python)
Posted
技术标签:
【中文标题】这种素数筛的实现是不是适用于所有素数?还是只是侥幸(Python)【英文标题】:Will this implementation of a prime sieve work for all primes? or is it just a fluke(Python)这种素数筛的实现是否适用于所有素数?还是只是侥幸(Python) 【发布时间】:2016-10-07 19:02:00 【问题描述】:p = 2
for i in range(3,10000000000000000,2):
if p%i >= 1:
print(i)
p = p*(i*i)
我已经对其进行了测试,它似乎至少可以在前 100 个素数上工作,它会准确地无限期地返回素数吗?(理论上不是字面意思)。
【问题讨论】:
那么你是在问python的数量限制吗?还是大数字的计算错误? 我想知道这是否是一个有效的筛子;它会在每次迭代时打印出一个素数吗? 它说 27 是素数,这是不正确的:27 == 3*3*3
我假设是 Python 3。
它也认为 125 是质数,但是125 == 5*5*5
,对于 343 也是如此:343 == 7*7*7
【参考方案1】:
您的限制(除了代码正确性,cmets 已经指出)将基于 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,就会有性能损失。
【讨论】:
谢谢!筛子实际上对主要力量不起作用,所以我不得不修理它。仍然有用的信息:) 谢谢@MoonMoon。当我最初阅读这个问题时,我认为它是关于计算限制的。以上是关于这种素数筛的实现是不是适用于所有素数?还是只是侥幸(Python)的主要内容,如果未能解决你的问题,请参考以下文章