2016-07-04 3 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と言う。このアプローチでは、数値の法は配列s[k]に格納されます。誰も助けることができますか?Javaの巨大数のモジュラスを求める

+0

786432立方体はそれほど大きくありません。ところで、モジュラ累乗を使用して大きな数値を避けることができます。 – harold

+0

をサイドノードとして使用します。これは、剰余演算子であり、モジュロ演算子ではありません。 1つの値が負であれば、残りの部分は負の値を返すことができます。ただし、数学的なモジュロ演算子ではできません。数学的モジュロに 'Math#floorMod' – SomeJavaGuy

+0

@haroldを使用したいのであれば、' int'に格納するには大きすぎます。 – Jesper

答えて

2

Math.powを使用する場合は、ダブルタイプを使用しています。次に、それをintに変換し直します。値が大きすぎる場合、丸めが行われ、切り捨てられます。方法mod特に

不変任意精度の整数

値である(のBigIntegerを返し

あなたはBigIntegerを使用する必要があり、この問題を解決するために

このmod m)。このメソッドは、常に負でないBigIntegerを返すという点で、剰余とは異なります。

+0

@davideLorenzoMarinoに感謝します。型キャスティングは必須ではありません。 – vidhit

関連する問題