|
4
|
| Kristoffer Sall-Storgaard ProllyGeek · 技术社区 · 16 年前 |
|
|
1
2
这是一个更复杂的算法,也许技术上不算筛子,但一种方法是不一次删除给定素数的所有倍数,而是将下一个倍数(连同素数)排队。这可以在生成器实现中使用。队列最终仍将包含大量(倍数)素数,但没有构建然后过滤列表所包含的素数那么多。
注意-队列不是FIFO。您将始终提取第一项最低的元组,但是新元组/替换元组(通常)没有第一项最高的元组,并且(与上面的6一样)会有重复的元组。 为了在Python中有效地处理队列,我建议使用一个由元组的第一项设置键的字典(即hashtable)。数据是一组第二项值(原始素数)。
|
|
2
6
我会说,“使用
试试这个。
|
|
|
3
2
你的算法坏了。先让它为maxnum=100工作。
在(1010010001000010000000000…)中绘制运行maxnum所需的时间,您可以推断3931232323所需的时间:) |
|
4
1
python有一个第三方模块,名为
它有几个功能,可能对您有用,因为它们非常快。概率数据大约在40亿大关。
|
|
|
5
0
|
|
|
6
0
关于内存限制,如何创建一个自定义列表(类),内部是列表或数组的链表。神奇地在内部从一个遍历到另一个,并根据需要添加更多,因为调用者使用您的自定义列表和您提供的外部接口,这些接口将类似于您的问题中使用的数组的.append.remove等所需的那些成员。 注意 :我不是Python程序员。不知道如何实现我在Python中所说的。也许我不知道这里的来龙去脉,所以如果我被否决了,我会理解的。 或许可以使用“ generators linked list . |
|
|
7
0
试试这个:
在得到大量素数之前,不应该耗尽内存。这样您就不必担心创建一个倍数列表。但不确定这是否还算作筛子。
事实上,这对我没用
正如在
this question
32位系统上python列表的最大大小为
不过,64位系统不应该有这样的问题。
编辑: 为了避免内存问题,您可以将素数列表存储在硬盘上的一个文件中。每行存储一个素数,并在每次检查新数字时读取该文件。 可能是这样的:
最后,硬盘上会有一个包含所有素数的文件。 好吧,这会很慢,但你不会耗尽内存。您可以通过提高读/写文件的速度(如 RAID |