ABC158 E - Divisible Substring
問題原文
問題要旨
0
~ 9
からなる文字列 が与えられる。
の連続する区間を10進数と見立てたとき、それが 素数 の倍数になっているようなものの通り数はいくつか。
- は素数
解法
これ(は?)
at274.hatenablog.com
まぁこっちの方が後出なんですが。。。
のときは 10 と互いに素んいならないので、別の方法で処理する必要があるので気をつける。(末尾だけ見ればいいね)
実装
from collections import Counter N, P = map(int, input().split()) S = input() if 10 % P == 0: ans = 0 for i, s in enumerate(S, start=1): if int(s) % P != 0: continue ans += i print(ans) else: X = [0] for i, s in enumerate(S[::-1]): X.append((X[-1] + pow(10, i, P) * int(s)) % P) C = Counter(X) ans = 0 for v in C.values(): ans += v * (v - 1) // 2 print(ans)
感想
なんでこれ復習してなかったんですか。。。。???????