結果
問題 |
No.1747 Many Formulae 2
|
ユーザー |
![]() |
提出日時 | 2025-07-01 02:04:02 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 103 ms / 2,000 ms |
コード長 | 960 bytes |
コンパイル時間 | 502 ms |
コンパイル使用メモリ | 82,288 KB |
実行使用メモリ | 72,340 KB |
最終ジャッジ日時 | 2025-07-01 02:04:05 |
合計ジャッジ時間 | 2,784 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 19 |
ソースコード
from collections import defaultdict from functools import reduce def set_order_partitions(n: int, yield_func): def recur(p: int, g: list[int]): if p == n: yield_func(g) return # 左隣のグループに属する g[p] = g[p-1] recur(p+1, g) # 新たなグループを作成する g[p] = g[p-1]+1 recur(p+1, g) assert n > 0 g = [0 for _ in range(n)] recur(1, g) def is_prime(n: int) -> bool: if n < 2: return False x = 2 while x * x <= n: if n % x == 0: return False x += 1 return True S = input() ds = [int(c) for c in S] ans = 0 def func(g: list[int]): global ans d = defaultdict(list) for i, p in enumerate(g): d[p].append(ds[i]) t = 0 for vs in d.values(): t += reduce(lambda a, b: 10*a+b, vs, 0) if is_prime(t): ans += 1 set_order_partitions(len(S), func) print(ans)