This question already has answers here:
How to calculate modulus of large numbers?
(10个回答)
3年前关闭。
现在,在此代码中,
(10个回答)
3年前关闭。
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]
中。有人可以帮忙吗? 最佳答案
如果使用Math.pow,则使用双精度类型。然后将其转换回int。如果值太大,可能会四舍五入,并且会截断。
要解决此问题,您需要使用BigInteger
:
不可变的任意精度整数
特别是方法mod:
返回其值为(this mod m)的BigInteger。此方法与其余方法的不同之处在于,它总是返回非负的BigInteger。
10-08 09:13