0

我知道有许多素数发生器,例如 Eratosthenes 或 Atkin 的筛子。但它们会按顺序生成数字,从小数字开始。我可以使用什么方法来获取间隔中的素数而不从较小的开始?

一个选项可能是使用随机数生成器并使用素数测试、确定性或概率性测试输出,具体取决于我想要实现的目标。无论如何,测试将是缓慢而复杂的。

是否有任何快速简便的方法可以不连续地生成素数?一个伪素数生成器也可以。

问候


我更清楚地重写了这个问题:

我怎样才能在给定的间隔内生成素数,而无需: - 从较小的顺序到最大的(与 Erathostenes 筛一样) - 也不对随机序列使用慢概率素数测试?

是否有任何 FAST 和 EASY 算法或函数以这样的方式生成数字,如果你长时间运行它,你会得到一个区间内的所有素数?(我不介意它是否也会产生一些复合材料)。

4

1 回答 1

0

如果区间不是太大,区间的低端又不是太高,可以使用分段的埃拉托色尼筛;“太大”和“太高”的定义取决于你的抱负和耐心,但任何大于 10^15 的东西都不太可能成功。否则,您可以在所需的间隔中选择一个随机奇数,测试它的素数,如果它是素数则保留它或尝试下一个更大的奇数,继续直到找到素数;如果您愿意,可以通过使用质数轮生成候选质数来加快速度,而不仅仅是测试下一个奇数。没有第三种选择。

你说过如果这个数字是复合的,你不会太介意。在这种情况下,您可以生成一个随机奇数,仅针对以 2 为基数且没有其他基数的强伪素数对其进行测试,如果测试表明它是素数,则保留它,或者如果测试表明它是,则使用下一个奇数重试合成的。这不是一个完美的素数测试,但它比 Miller-Rabin 测试的 25 个随机碱基测试更快,并且比 Lucas 伪素测试更快,并且可能足以满足您的目的。

您可以通过在 Stack Overflow 上搜索或查看我的博客来找到所有这些内容的描述,或者如果您有其他具体问题,也可以在这里提问。

于 2013-03-28T13:46:52.663 回答