我正在尝试使用BigInteger类在Java中实现Fermat,Miller-Rabin或AKS算法。
我想我已经实现了Fermat test,只是BigInteger类不允许将BigIntegers发挥到BigIntegers的力量(一个人只能将BigIntegers发挥到原始int的力量)。有没有解决的办法?
有问题的行在我的代码中表示:
public static boolean fermatPrimalityTest(BigInteger n)
{
BigInteger a;
Random rand = new Random();
int maxIterations = 100000;
for (int i = 0; i < maxIterations; i++) {
a = new BigInteger(2048, rand);
// PROBLEM WITH a.pow(n) BECAUSE n IS NOT A BigInteger
boolean test = ((a.pow(n)).minus(BigInteger.ONE)).equals((BigInteger.ONE).mod(n));
if (!test)
return false;
}
return true;
}
最佳答案
我认为BigInteger.modPow
可能就是您想要的。注意费马测试中的“ mod m”。
关于java - BigIntegers对BigIntegers的影响,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4026111/