如果数字<2 ^ 63,如何显示数字是否为素数?

时间:2014-06-21 16:19:13

标签: c algorithm

我读过关于费马的素性测试......这很好但是有一个关于卡迈克尔数字的缺陷......它表明它找不到用素数来解释它们。 / p>

我的代码:

bool fermat(long long p,int itr)
{
  if(p==1)return false;
  for(int i=0;i<itr;i++)
  {
    long long a=rand()%(p-1)+1;
    if(modulo(a,p-1,p)!=1)
       return false;
    else
       return true;
  }
}

如何在不解决Carmichael数字问题的情况下发现p是素数?这个算法的任何修改?

1 个答案:

答案 0 :(得分:1)

Miller-Rabin检验的伪代码给出了概率答案,如下所示:

function isPrime(n, k=5)
    if n < 2 then return False
    for p in [2,3,5,7,11,13,17,19,23,29]
        if n % p == 0 then return n == p
    s, d = 0, n-1
    while d % 2 == 0
        s, d = s+1, d/2
    for i from 0 to k
        x = powerMod(randint(2, n-1), d, n)
        if x == 1 or x == n-1 then next i
        for r from 1 to s
            x = (x * x) % n
            if x == 1 then return False
            if x == n-1 then next i
        return False
    return True

使用 k (默认5)随机碱基。如果您事先知道 n 的限制,您可以选择一组给出确定性答案的基础;有关各种 n 的基础列表,请参阅miller-rabin.appspot.com

相关问题