結果
| 問題 | No.2 素因数ゲーム |
| コンテスト | |
| ユーザー |
Tuchmos
|
| 提出日時 | 2025-11-14 17:26:03 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 43 ms / 5,000 ms |
| コード長 | 2,056 bytes |
| コンパイル時間 | 321 ms |
| コンパイル使用メモリ | 82,716 KB |
| 実行使用メモリ | 56,260 KB |
| 最終ジャッジ日時 | 2025-11-14 17:26:06 |
| 合計ジャッジ時間 | 2,740 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 31 |
ソースコード
N=int(input())
###############################################################
#https://atcoder.jp/contests/abc177/submissions/70837775
import random
from math import gcd
def is_prime(n):
if n<2:
return False
prime=[2,3,5,7,11,13]
for p in prime:
if n%p==0:
return n==p
d=n-1
s=0
while d%2==0:
d//=2
s+=1
for a in [2,325,9375,28178,450775,9780504,1795265022]:
if a%n==0:
continue
x=pow(a,d,n)
if x==1 or x==n-1:
continue
for i in range(s-1):
x=x*x%n
if x==n-1:
break
else:
return False
return True
def _rho(n):
if n%2==0:
return 2
if n%3==0:
return 3
while True:
y=random.randrange(2,n-1)
c=random.randrange(1,n-1)
m=128
g=1
r=1
q=1
x=0
while g==1:
x=y
for i in range(r):
y=(y*y+c)%n
k=0
while k<r and g==1:
ys=y
for i in range(min(m,r-k)):
y=(y*y+c)%n
q=(q*(x-y)%n)%n
g=gcd(q,n)
k+=m
r<<=1
if g==n:
g=1
while g==1:
ys=(ys*ys+c)%n
g=gcd(abs(x-ys),n)
if g==1:
continue
return g
def _fac(n,lst):
if n==1:
return
if is_prime(n):
lst.append(n)
return
d=_rho(n)
_fac(d,lst)
_fac(n//d,lst)
def factors(n):
res=[]
_fac(n,res)
d={}
for p in res:
d[p]=d.get(p,0)+1
return d
def divisors(n):
low,up=[],[]
d=1
while d*d<=n:
if n%d==0:
low.append(d)
if d*d<n:
up.append(n//d)
d+=1
return low+up[::-1]
###############################################################
F=factors(N)
xor=0
for k,v in F.items():
xor^=v
print('Alice' if xor!=0 else 'Bob')
Tuchmos