在java中找到大数模数

时间:2016-07-04 13:30:05

标签: java

      for(i=0; i<n+1; i++)
        {
            y=y+(a[i]*(int)Math.pow(j,i));
        }
        int r=y/786433;
        s[k]=y-(r*786433);
        k++;

现在,在此代码中,j值可以是786432。所以当我试图得到一个数字的模数说(1+2*(786432)^2+3*(786432)^3)%786433然后我得到-521562这是不正确的我之前也使用模数运算符但我得到了相同的答案,即使这种方法我得到相同回答。在这种方法中,数字的模数存储在数组s[k]中。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

如果您使用Math.pow,则使用的是双重类型。然后将其转换回int。如果值太大,可能会发生舍入,也会截断。

要解决此问题,您需要使用BigInteger

  

不可变的任意精度整数

特别是方法mod

  

返回一个BigInteger,其值为(此mod m)。此方法与其余方法的不同之处在于它始终返回非负BigInteger。