初心者なのでご協力お願いいたします。
ARC atcoder regular contest 107回のA Simple Mathについて質問です。
以下のurlが問題内容です
https://atcoder.jp/contests/arc107/tasks/arc107_a
解説を読んでもわからなかったのですが、
私の考えとしましては、
与えられた A B Cに対して
そのまま等差数列の公式を用いて、
mod= 998244353 と定義し、
(a*(a+1)/2) (b(b+1)/2)(c(c+1)/2)%mod
とそのまま計算をした結果、値がマイナスとなったため、式変換をして、
(a*(a+1)/2)%mod )((b(b+1)/2)%mod)(c(c+1)/2)%mod
とmodの値をそのまま分けて計算したところ、違った値を出力していました。
分からなかったので、以下が他の方が提出した解答です。
c++
1 #include <bits/stdc++.h> 2using namespace std; 3 int main() 4 { 5 long long a,b,c; 6 cin>>a>>b>>c; 7 long long MOD=998244353; 8 9 a=(a*(a+1)/2)%MOD; 10 b=(b*(b+1)/2)%MOD; 11 c=(c*(c+1)/2)%MOD; 12 long long e= ((a*b)%MOD*c%MOD); 13 cout<<e; 14 }
このコードで気になったところは、a,b,cの等差数列の和をMODで割った余りを出力した後も、なぜまたもう一度MOD計算を出力してるのかがわからないです。
例えば、(a*b)%MOD、 c%MODの部分です。
合計三回のMOD計算ではダメな理由を教えてほしいです。
等差数列までは思い出せたのですが、これ以降の理由が全く分からないので、ご協力お願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/27 14:40