我想知道是否有一种简单的方法可以找到X旁边的素数。
例如,如果X = 2,则下一个素数将为3.我所拥有的算法没问题,如果我想知道小数字但我想计算X = 3百万。
我找到了一个计算素数的算法,但计算它们需要花费很多时间,因为它计算从0到X的所有素数......例如100万,需要将近2分钟。
问题是......我怎样才能找到下一个素数?有一个有效的算法吗?我找到的最佳解决方案是检查X + 1是否为素数并且增加直到找到一个......
答案 0 :(得分:3)
您需要的是test for primality从 X 开始的每个号码。你可以在GMP library中找到这样的测试,或者你可以在Rosetta code中查看Miller-Rabin算法的片段。
答案 1 :(得分:0)
一种可能的解决方案是,不是将数量增加one
,如果数字为奇数,则可以将数字增加two
,否则将增加1,然后在所有将来的迭代中增加2。 / p>
如下面的代码段
if (num is odd)
check_prime_of(num+2);
else /*num is even and not equal to 2*/
check_prime_of(num+1);
答案 2 :(得分:0)
我可以将“if x + 1 is prime”的速度提高一倍.....对于所有x> 2,那么x + 1永远不会是素数,所以测试x + 2代替:)
除此之外,没有。没有有效的算法可以在X之后找到下一个素数。“长时间计算”是使公钥加密(互联网上大部分安全性的基础)成为可能的原因。公钥是基于找到给定大数的两个素因子的难度;如果在X很容易找到下一个素数,那么你可以简单地从大数的平方根开始并开始计数。