形式10 ^ n + k的数量的原始性测试

时间:2011-10-14 16:22:27

标签: primes primality-test

我有一些形式10 N + K,其中N约为1000,K非常小(低于500)。我想测试这些数字的素数。目前我正在使用基数2的费马测试,之前检查小因子(<10000)。

然而,这对我来说相当缓慢。有没有比这更快的算法?这种特殊形式可以被某种方式利用吗?

另外,如果两个数字仅在K上有所不同,是否可以更快地测试这两个数字?

2 个答案:

答案 0 :(得分:1)

如果K的因子为2或5,那么10 ^ N + K是复合的。这允许快速测试少量数字。大质数都是P mod 6 = 1或5.你可以使用它来消除2/3的可能K值。通过一点点工作,你可以设置一个2-4轮,以避免很多分裂:

increment <- either 2 or 4 as required
repeat
  K <- K + increment
  increment <- 6 - increment
  if (K mod 5 = 0) then 
    continue 
  endif
until (isPrime(10^N + K) or (K > 500))

如果罚款,试用最多10,000。您是否首先建立了10,000个素数列表?使用Eratosthenes的Sieve创建列表并只读取数字。

运行Fermat测试基地2是一个良好的开端,它可以很快找到很多复合材料。

之后你需要实现概率Miller-Rabin测试,并运行足够多次以使你的硬件更可能失败而不是数字是复合的。

答案 1 :(得分:0)

此外,如果两个数字仅在K上有所不同,是否可以更快地测试这两个数字?

检查相对较小区间的质数,如[10 N + K 1 ,10 N + K 2 < /子>] 你可以使用Erathostenes的筛子来检查是否有小数字的可分性。

然后可以通过像Miller-Rabin这样的概率测试来检查剩余的主要候选人。