改进审判庭原始性测试

时间:2019-04-24 07:52:55

标签: c# algorithm primes

我正在学习检查数字是素数,我很好奇如何才能更快地处理大数字(如2 ^ 64-1)

bool IsPrime(BigInteger number)
{
    if (number< 2) return false;
    else if (number< 4) return true;
    else if (number% 2 == 0) return false;
    else for (BigInteger u = 3; u*u <= Num; u += 2)
        if (number % u == 0) return false;
    return true;
}

1 个答案:

答案 0 :(得分:0)

要进行很小的改进,以至于您不会注意到它,可以保存一条if语句:

if (number < 2) return false;
else if (number % 2 == 0) return number == 2;
else for...

对于显着的改进,我建议使用Eratosthenes筛网代替审判部门。如果仍然太慢,请研究其他方法,例如Miller-Rabin。

即使使用快速方法,也值得在短时间内使用较慢的方法,例如,尝试设置最多5,000个素数作为因子,然后再设置较复杂的测试之一。要做很多工作来确定4,327,856,799,435是无用的。