2

配列 Array = {} があります。配列のサイズは n です

私の制約は次のようなものです:

n <= 100000 および配列i <=100

配列内のすべての要素の積を見つける必要があります。積を変更する必要がある mod 値が与えられます。mod の値は常に変化し、この mod の値は常に n 以下です。

私の問題は、私が選択したときに、グローバル mod 値が R = 1000000000 (mod 制約よりもはるかに大きい) であり、製品がこの値を超えるたびに結果を変更することです。

しかし、私が得た結果がゼロである理由がわかりません。

私の質問は、そのような状況でどのように R を選択するかです。

4

3 に答える 3

1

あなたのコードはわかりませんが、0 が正しい結果である可能性が高いです。

0 以外の結果を得るには、R の大きな素数を選択し、この数で割り切れる要素がないことを確認してください。

于 2013-08-10T12:14:19.400 に答える
0

特定の値を法として配列内の値の積を計算しているように聞こえますが、中間計算での整数オーバーフローを制限するために別の値を使用しています。そうすると、間違った結果が得られるリスクが高くなります。

たとえば 120 mod 9 = 3、その間(120 mod 100) mod 9 = 20 mod 9 = 2

正しい手順は、最終結果に使用するのと同じ数を法としてすべての計算を行うことです。(a * b) mod n = (a mod n) * (b mod n) mod n

例えば (24 * 5) mod 9 = (24 mod 9) * (5 mod 9) mod 9 = (6 * 5) mod 9 = 30 mod 9 = 3

于 2013-08-10T12:46:02.187 に答える