バイナリ・パワー・オン機能に問題があります。乗算の実行中に結果を含む変数がオーバーフローし、誤った結果が返されます。ソース値が4,312,952,827より大きい場合に発生します。だから私はこの問題をどのように解決するのですか?ここに私の機能のコードがあります。私に間違った結果を与えるバイナリ・パワー化
unsigned long long binpow(unsigned long long a, unsigned long long n, unsigned long long m)
{
unsigned long long res;
res=1;
while (n)
{
if (n & 1)
{
res=(res*a)%m;
n--;
}
a=(a*a)%m;
n >>= 1;
}
return res;
}
コーナーケース: 'binpow(positive_a、0、1)'は間違った答え '1'を生成します。そのようなケースをキャッチするために 'unsigned long long res = 1LLU%m'で始めることができました。 – chux