C++ での複合代入の実行フローを知りたいです。CodeChef questionに出くわしました。そこでは、NCR mod p 値を計算し、それらを合計して最終的な答えを取得しています。
// correct
for(int i=min1; i<=max1; i+=2){
ans = (ans+ncr_mod_p(n,i))%mod;
}
// incorrect
for(int i=min1; i<=max1; i+=2){
ans+=ncr_mod_p(n,i)%mod;
}
これは、整数オーバーフローが原因で発生しています。
では、複合代入の実行順序は?
たとえば、方程式があるa+=b%c
場合、実行シーケンスは次のようになります。
a = (a+b)%c
// OR
a = a+(b)%c;