Random 简单快速的随机素数发生器?

Random 简单快速的随机素数发生器?,random,generator,primes,Random,Generator,Primes,我知道有很多主要的发电机,比如埃拉托什尼筛或阿特金筛。 但它们从小的开始,按顺序生成数字。 我可以使用什么方法来获得区间内的素数,而不必从较小的素数开始 一种选择是使用随机数生成器,并根据我想要实现的目标,使用素性测试(确定性测试或概率测试)测试输出。无论如何,测试将是缓慢而复杂的 有没有快速简便的方法来非连续地生成素数? 伪素数生成器也可以 问候 我将问题改写得更清楚: 如何在给定的区间内生成素数,而无需: -按顺序从小的到大的(如埃拉托内斯筛) -也没有对随机序列使用慢概率素性测试 有没有

我知道有很多主要的发电机,比如埃拉托什尼筛或阿特金筛。 但它们从小的开始,按顺序生成数字。 我可以使用什么方法来获得区间内的素数,而不必从较小的素数开始

一种选择是使用随机数生成器,并根据我想要实现的目标,使用素性测试(确定性测试或概率测试)测试输出。无论如何,测试将是缓慢而复杂的

有没有快速简便的方法来非连续地生成素数? 伪素数生成器也可以

问候


我将问题改写得更清楚:

如何在给定的区间内生成素数,而无需: -按顺序从小的到大的(如埃拉托内斯筛) -也没有对随机序列使用慢概率素性测试


有没有一种快速简单的算法或函数可以生成这样的数字,如果你长时间运行它,你会得到一个区间上的所有素数?(我不介意它是否也会产生一些复合物)。

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

你说过如果这个数字是复合的,你不会太在意。在这种情况下,您可以生成一个随机奇数,只测试它对基2的强伪素数,而不测试其他基,如果测试说它是素数,则保留它;如果测试说它是复合数,则使用下一个奇数重试。这不是一个完美的素数测试,但它比Miller-Rabin测试中的25个随机基测试要快,比Lucas伪素数测试要快,可能对您的目的来说已经足够好了


您可以通过搜索Stack Overflow(堆栈溢出)或查看来找到所有这些内容的描述,或者如果您还有其他具体问题,也可以在此处询问。

可能重复的是,它只是一个素数,还是一个间隔内的连续素数??你确实提到了“间隔”,这有点不清楚。如果在一个区间内有几个素数,那么你确实可以从一个筛子中获益。(续)这是一个“偏移”筛子,它首先筛选到区间上限的sqrt,然后筛选区间本身,就像一个跳到指定区间的分段筛子一样。那么它是哪一种呢?我指的是在给定区间上生成“伪素数”的方法。但我不想生成所有不断增大的数字,然后再测试它的素性。假设我想生成随机奇数。我可以使用某种模多项式来生成数字x,然后计算2X+1。这样我就可以得到区间上任意大小的奇数,而不用先计算所有的小数值。除了“伪素数”,我想要类似的东西。一个有足够时间的生成器可以在一个区间内生成所有素数,但如果它生成一些(少数)非素数也没问题。我的帖子不是那个的复制品,因为他需要严格的素数,并且是固定大小的,他接受从小到大的方法,计算所有的素数,然后进行筛选。我不需要全部,只需要某种函数,它可以生成给定区间上的数字,可能是素数。我打算用它来生成大约200位的数字。这对于筛选来说太大了,所以你唯一的选择就是生成和测试:选择一个奇数,测试它是否是素数,如果它是复合数,尝试另一个。与每次失败仅增加2个相比,2,3,5,7轮将减少一半的主要候选数量。使用什么素数测试将取决于您对素数的信心:2-spsp本身就足以用于许多目的,或者如果您想要更大的信心,您可以添加Lucas伪素数测试。如果需要更多帮助,请查看我的博客或询问具体问题。谢谢。我也听说过2RP方法,非常快