生成更多的素数

时间:2014-07-14 11:00:07

标签: primes

我正在做作业以尽可能多地生成素数。 我用 Eratosthenes筛选来生成小于10,000,000的素数。我想生成更多。如何生成更多素数?

2 个答案:

答案 0 :(得分:0)

对于小 n ,分段的Eratosthenes筛子应该可以工作。对于大型 n ,用轮子生成候选者然后用Miller-Rabin进行测试。小到大之间的界限取决于您的愿望和预算。我讨论在my blog生成第一个十亿个素数。

答案 1 :(得分:0)

虽然有很多算法可以找到素数,但是你最大的收获来自于Eratosthenes的Sieve,因为你为你测试的每个数字花费O(log n * log log n)次。所以为了获得更大,你想要优化你的Eratosthenes的筛子,而且很可能你的问题是记忆。请考虑以下优化:

  • 在数组中每个项目只使用一个位(与字节方法相比,允许在内存中获得8倍的元素)。
  • 不要存储偶数。仅筛选奇数(允许您在内存中获得2倍的元素)。
  • 聪明,你也避免存储那些可被3整除的东西。我不会给你答案,但此时它的收益正在逐渐减少。
  • 想想:一旦你在(1..x)之间有一组素数,你如何使用它们来筛选(x..y)之间的不同区间。释放你的(1 .. x]内存,所以你可以分配(x..y)内存。
  • 不要害羞地使用磁盘空间来获取额外的内存。