結果
| 問題 |
No.181 A↑↑N mod M
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:48:03 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,306 bytes |
| コンパイル時間 | 362 ms |
| コンパイル使用メモリ | 82,328 KB |
| 実行使用メモリ | 54,692 KB |
| 最終ジャッジ日時 | 2025-03-20 20:48:09 |
| 合計ジャッジ時間 | 3,106 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 6 |
| other | AC * 35 WA * 2 |
ソースコード
import sys
import math
from math import gcd
def euler_phi(n):
result = n
i = 2
while i * i <= n:
if n % i == 0:
while n % i == 0:
n //= i
result -= result // i
i += 1
if n > 1:
result -= result // n
return result
def crt(remainders, moduli):
x = 0
product = 1
for m in moduli:
product *= m
for rm, m in zip(remainders, moduli):
Mi = product // m
x += rm * Mi * pow(Mi, -1, m)
return x % product
def factorize(m):
factors = {}
i = 2
while i * i <= m:
while m % i == 0:
factors[i] = factors.get(i, 0) + 1
m //= i
i += 1
if m > 1:
factors[m] = 1
return factors
def solve_prime_power(p, k, A, N):
s = 0
a = A
while a % p == 0 and a != 0:
s += 1
a //= p
current_mod = p ** k
if N == 0:
return 1 % current_mod
if s == 0:
def recurse(n, mod):
if mod == 1:
return 0
if n == 0:
return 1 % mod
if n == 1:
return A % mod
phi = euler_phi(mod)
e = recurse(n-1, phi)
return pow(A, e + (phi if e < phi else 0), mod)
return recurse(N, current_mod)
else:
if s * 1 >= k:
return 0
if N == 1:
return (A % current_mod)
a_prime = A // (p ** s)
if N == 2:
e = A
if s * e >= k:
return 0
else:
part1 = pow(p, s * e, current_mod)
part2 = pow(a_prime, e, current_mod // (p ** (s * e)))
return (part1 * part2) % current_mod
if N >= 3:
return 0
def main():
A, N, M = map(int, sys.stdin.readline().split())
if M == 1:
print(0)
return
if N == 0:
print(1 % M)
return
factors = factorize(M)
moduli = []
remainders = []
for p, exp in factors.items():
pk = p ** exp
remainder = solve_prime_power(p, exp, A, N)
remainders.append(remainder)
moduli.append(pk)
result = crt(remainders, moduli)
print(result % M)
if __name__ == "__main__":
main()
lam6er