java - 如果 c 比 b 小得多,找到 a**b % c(a 幂 b 模 c)的最佳方法是什么?

标签 java algorithm math exponential integer-arithmetic

我已经在 java 中为 BigInteger 尝试过 modPow() 函数。
但它需要太长时间。

我知道模乘法,甚至也知道求幂。

但由于条件限制,我无法解决这个问题。

ab 的值可以包含 1000000 个数字(这么大,不是吗)? 现在我想找到 (a**b)%c。 作为第一步,我们可以做 a = a % c。 但是在这里,即使是 b 也是如此巨大。

c = 10^9+7

最佳答案

尝试使用此功能。它使用一些 JS 引擎来计算任何东西。 将表达式作为字符串参数并运行它。

private void calculateExpression(String exp){

    try {
        //calling a JS engine which helps us to calculate what we need
        ScriptEngineManager mgr = new ScriptEngineManager();
        ScriptEngine engine = mgr.getEngineByName("JavaScript");
        Object result = engine.eval(exp);

        //checking if we got any error
        if (result.toString().equals("Infinity") || result.toString().equals("NaN")){
            System.out.println("Can't divide with zero");
        }           
        else if (result != null){
            Double doubleResult = new Double("" + result);

            //checking if the result is an int value
            if ((doubleResult == Math.floor(doubleResult)) && !Double.isInfinite(doubleResult)) {
                text.setText("" + (doubleResult.longValue()));
            }
            else {
                //means that it's double value
                text.setText(result.toString());
            }
        }
    }
    catch (Exception e) { 
        e.printStackTrace();
    }
}

关于java - 如果 c 比 b 小得多,找到 a**b % c(a 幂 b 模 c)的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28285922/

相关文章:

c++ - C++ 中的 "Summable Numbers"

java - MP 图表在折线图中的 X 轴上显示一个额外的值?

java - Java 中的二叉树插入

math - 使用该线上的点找到垂直线

algorithm - 找出满足特定要求的序列中三个数字的组合数量

algorithm - 从至少有两个元素相等的列表中找出所有最大的子列表

algorithm - 在程序中寻找循环不变式来计算立方和?

java - 通过多个jsp页面倒计时

java - ascii 谱中未分配的字符?

java - 如何转换为韩文首字母