結果
問題 |
No.747 循環小数N桁目 Hard
|
ユーザー |
![]() |
提出日時 | 2025-06-30 21:47:25 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,040 bytes |
コンパイル時間 | 521 ms |
コンパイル使用メモリ | 81,980 KB |
実行使用メモリ | 64,452 KB |
最終ジャッジ日時 | 2025-06-30 21:47:34 |
合計ジャッジ時間 | 9,110 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 110 WA * 10 |
ソースコード
def modulo(s: str, m: int) -> int: x = 0 for d in map(int, s): x = (10*x + d) % m return x def floyds_cycle_finding(a0, f) -> tuple[int, int]: """ フロイドの循環検出法 a0 : 初期値 f : 次の値を求める関数 return: tuple[サイクルに入るまでの長さ, サイクルの長さ] """ x = y = a0 while 1: x = f(x) y = f(f(y)) if x == y: break x = a0 head_len = 0 while x != y: x = f(x) y = f(y) head_len += 1 cycle_len = 0 while 1: x = f(x) y = f(f(y)) cycle_len += 1 if x == y: break return head_len, cycle_len def str_powmod(n: str, k: str, mod: int) -> int: a = modulo(n, mod) head_len, cycle_len = floyds_cycle_finding(a, lambda x: x * a % mod) if cycle_len == 1: return a b = modulo(k, cycle_len) return pow(a, b, mod) N = input() K = input() x = str_powmod(N, K, 6) ans = '428571'[x] print(ans)