如果c远小于b,找到** b%c(功率b模c)的最佳方法是什么?

时间:2015-02-02 20:12:54

标签: java algorithm math exponential integer-arithmetic

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

我知道模乘法,甚至取幂也是指数。

但由于约束,我无法解决这个问题。

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

c = 10^9+7

1 个答案:

答案 0 :(得分:0)

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

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();
    }
}