結果
| 問題 |
No.2193 メガの下1桁
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 18:59:19 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 4,618 bytes |
| コンパイル時間 | 187 ms |
| コンパイル使用メモリ | 82,724 KB |
| 実行使用メモリ | 54,660 KB |
| 最終ジャッジ日時 | 2025-03-20 19:00:04 |
| 合計ジャッジ時間 | 2,712 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 32 WA * 8 |
ソースコード
M = int(input())
D = int(input())
N = int(input())
B = int(input())
def compute_pow_mod(a, exponent, B):
a = a % B
if a == 0:
return 0 if exponent != 0 else 1 % B
if B == 2:
return 1 % B if exponent else 0
elif B == 3:
exponent = exponent % 2
return pow(a, exponent if exponent != 0 else 2, 3)
elif B == 4:
if a == 0:
return 0
elif a == 1:
return 1
elif a == 2:
if exponent == 0:
return 1 % 4
elif exponent == 1:
return 2
else:
return 0
elif a == 3:
exponent = exponent % 2
return 3 ** (exponent if exponent else 2) % 4
elif B == 5:
exponent = exponent % 4
exponent = exponent if exponent != 0 else 4
return pow(a, exponent, 5)
elif B == 6:
if a in (1, 5):
exponent = exponent % 2
return a ** (exponent if exponent else 2) % 6
elif a in (2, 4):
if exponent == 0:
return 1 % 6
elif exponent == 1:
return a % 6
else:
return (a ** 2) % 6
elif a == 3:
return 3 if exponent >= 1 else 1 % 6
else:
return 0
elif B == 7:
exponent = exponent % 6
exponent = exponent if exponent != 0 else 6
return pow(a, exponent, 7)
elif B == 8:
if a % 2 == 0:
if a == 0:
return 0
elif a == 2:
if exponent == 0:
return 1 % 8
elif exponent == 1:
return 2
elif exponent == 2:
return 4
else:
return 0
elif a == 4:
if exponent == 0:
return 1 % 8
else:
return 4 if exponent == 1 else 0
elif a == 6:
if exponent == 0:
return 1 % 8
else:
return 6 if exponent == 1 else (6 ** 2) % 8
else: # a == 8 mod 8 which is 0
return 0
else:
exponent = exponent % 4
return pow(a, exponent if exponent != 0 else 4, 8)
elif B == 9:
if a in (1, 2, 4, 5, 7, 8):
exponent = exponent % 6
exponent = exponent if exponent != 0 else 6
return pow(a, exponent, 9)
elif a == 3 or a == 6:
if exponent == 0:
return 1 % 9
elif exponent == 1:
return a % 9
else:
return 0
elif B == 10:
if a in (1, 3, 7, 9):
exponent = exponent % 4
exponent = exponent if exponent != 0 else 4
return pow(a, exponent, 10)
elif a == 5:
return 5
elif a == 6:
return 6
elif a == 2:
exponent = exponent % 4
return (2 ** (exponent if exponent != 0 else 4)) % 10
elif a == 4:
return 4 if exponent % 2 == 1 else 6
elif a == 8:
exponent = exponent % 4
return (8 ** (exponent if exponent != 0 else 4)) % 10
elif B == 11:
exponent = exponent % 10
exponent = exponent if exponent != 0 else 10
return pow(a, exponent, 11)
else:
return 0
def main():
if N == 0:
final = M % B
else:
current = M % B
seen = {}
history = [current]
seen[current] = 0
step = 1
found_cycle = False
while step <= N:
a = (current + D) % B
exponent = current
next_val = compute_pow_mod(a, exponent, B)
if next_val in seen:
cycle_start = seen[next_val]
cycle_length = step - cycle_start
remaining = N - cycle_start
if remaining < 0:
final = history[N]
break
else:
mod_remaining = remaining % cycle_length
final = history[cycle_start + mod_remaining]
found_cycle = True
break
else:
seen[next_val] = step
history.append(next_val)
current = next_val
step += 1
if not found_cycle:
final = history[-1]
if final < 10:
print(final)
else:
print('A')
if __name__ == "__main__":
main()
lam6er