688^79 mod 3337 = 1570.
これを wolfram alpha で試したところ、次の結果が得られました。
しかし、Matlab で同じことを入力すると、答えとして 364 が得られます。私は何か間違ったことをしなければなりません。
これに関する任意の光をいただければ幸いです。
688^79 mod 3337 = 1570.
これを wolfram alpha で試したところ、次の結果が得られました。
しかし、Matlab で同じことを入力すると、答えとして 364 が得られます。私は何か間違ったことをしなければなりません。
これに関する任意の光をいただければ幸いです。
その理由は、Matlab がdouble
デフォルトで浮動小数点演算を使用するためです。688^79 のような大きな数値は、 として正確に表現できませんdouble
。(a として正確に表現できる最大の整数double
は2^53 のオーダーです)。
正しい結果を得るには、シンボリック変数を使用できます。これにより、精度が失われないことが保証されます。
>> x = sym('688^79');
>> y = sym('3337');
>> mod(x, y)
ans =
1570
私の計算機は、Wolfram と同じ答えを私に送ってくれます。688^79 の値も計算したので、Wolfram が正しいと信じがちです。おそらく、このような膨大な数で Matlab の容量を超えてしまい、それが正しい回答を送信しなかった理由です。