xor sum 4 - abc 147 d

解法

(xorの和)
= (桁上がりを無視した足し算の和)
= (足し算の和) - (桁上がりの和)

10^9+7で割るとこで事故った

waのコード
Submission #8867231 - AtCoder Beginner Contest 147
まず, 41行目あたりでAがlong longでもギリギリなことに注意

(1)59行目

(ans += P[i + 1] * (table[i] * (table[i] - 1) / 2) % inf) %= inf;



(2)

(ans += P[i] * table[i] * (table[i] - 1)) %= inf;

でもダメ
そうか, tableに3 * 10^5くらい入りうる


(3)

(ans += P[i + 1] * table[i] % inf * (table[i] - 1) / 2) %= inf;

でもダメ
割り算ダメか


(4)

(ans += P[i] * table[i] % inf * (table[i] - 1)) %= inf;

でok


(3)において
Submission #8884551 - AtCoder Beginner Contest 147
割り算を掛け算に直した

フェルマーの小定理より,
p : 素数, p !| a ∈ Zに対し,
 a^{p-1} ≡ 1 (mod p)
 a * a^{p-2} ≡ 1 (mod p)

よって, aの逆元は a^{p-2}
aで割る代わりに a^{p-2}をかける


(5)
modint構造体を使う
Submission #8884845 - AtCoder Beginner Contest 147