結果
| 問題 |
No.103 素因数ゲーム リターンズ
|
| コンテスト | |
| ユーザー |
s_shohei
|
| 提出日時 | 2021-09-27 20:43:39 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 77 ms / 5,000 ms |
| コード長 | 835 bytes |
| コンパイル時間 | 211 ms |
| コンパイル使用メモリ | 81,920 KB |
| 実行使用メモリ | 76,592 KB |
| 最終ジャッジ日時 | 2024-07-06 16:56:25 |
| 合計ジャッジ時間 | 2,745 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 20 |
ソースコード
n = int(input())
a = list(map(int, input().split()))
M = 10**6
bp = [0] * (M+10)
for i in range(2, M+10):
if bp[i] == 0:
bp[i] = i
for j in range(i*i, M+1, i):
bp[j] = i
def fact(n):
arr=[]
while n>1:
now=n
cnt=0
p=bp[now]
while now % p == 0:
now//=p
cnt+=1
arr.append([p,cnt])
n=now
return arr
from functools import lru_cache
@lru_cache(maxsize=None)
def grundy(n):
f = fact(n)
if len(f)==0:
return 0 # prime
s=set()
for p,cnt in f:
s.add(n//p)
if cnt>=2:
s.add(n//(p*p))
g_set = set([grundy(i) for i in s])
g = 0
while g in g_set:
g+=1
return g
xor=0
for num in a:
xor^=grundy(num)
if xor==0:
print("Bob")
else:
print("Alice")
s_shohei