我正在尝试使用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/

10-12 04:40