2016-07-04 28 views
0
 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]中。誰能幫忙?找到java中巨大數字的模數

+0

786432立方甚至沒有那麼大。順便說一句,你可以使用模冪運算來避免大數目。 – harold

+0

作爲sidenode,這是餘數運算符,而不是模運算符。如果一個數值是負數,餘數可以返回負數,但數學模算子不能這樣做。如果你想使用數學模運算'Math#floorMod' – SomeJavaGuy

+0

@harold,但它存儲在'int'中太大了。 – Jesper

回答

2

如果您使用Math.pow您正在使用雙重類型。然後你將它轉換回int。如果值太大,舍入可能會發生並截斷。

爲了解決這個問題,你需要使用BigInteger

不可變的任意精度的整數

特別的方法mod

返回一個BigInteger,其值是(這個mod m)。此方法與其餘部分不同之處在於它總是返回一個非負BigInteger。

+0

感謝@davideLorenzoMarino類型鑄造是不必要的。它給出了正面答案2 – vidhit