math - 有效存储质数

标签 math data-structures primes factorization

对于图书馆,我需要存储第一个质数,直到上限L。该集合必须具有O(1)查找时间(以检查数字是否为质数),并且给定一个数字必须很容易,查找下一个质数(假设它小于L)。

假设L是固定的,则可以用Eratostene筛子生成列表。现在,我使用一个压缩的 bool(boolean) 数组来存储列表,该列表仅包含3到L(含)之间的奇数的条目。这需要(L-2)/ 2位内存。我希望能够在不使用更多内存的情况下静态地增加L。

是否存在使用较少内存且具有类似属性的数据结构?还是至少具有恒定的查找时间? (然后可以枚举奇数,直到我们得到素数)

(我写的语言是Factor,但是这个问题在具有内置或易于编程的打包位数组的任何语言中都是相同的)

最佳答案

您可以显式检查更多质数以消除冗余。

目前,您只需要对两个对象执行此操作,方法是显式检查两个对象的除数,然后仅存储奇数是否为质数。

对于2和3,您会得到0到5的余数,其中只有1和5不能被2或3整除,并且可以导致质数,因此您降低到1/3。

对于2、3和5,您会从30个数字中得到8个数字,可以将其存储在一个字节中。

here对此进行了更详细的说明。

关于math - 有效存储质数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1032427/

相关文章:

python - 根据 4 个麦克风的 TDOA 确定 3-D 坐标

c - 链表实现中的虚拟节点

java - Collections.sort的BigO是什么?

c# - Eratosthenes 优化筛

c++ - 如何在 Sieve_of_Eratosthenes 中使用更少的内存

c++ - 如何找到硬件算法完全支持的最大整数?

java - 程序寻找总和为 1000 的毕达哥拉斯三元组,不明白为什么它不起作用?

python - 缩放 2D 坐标并保持它们的相对欧氏距离不变?

algorithm - 支持快速下一个高元素和下一个低元素的数据结构是什么?

algorithm - 我如何计算以 m 为模的主功率塔