我正在学习检查数字是素数,我很好奇如何才能更快地处理大数字(如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;
}
答案 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是无用的。