結果
| 問題 |
No.577 Prime Powerful Numbers
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-06-16 00:19:30 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,427 bytes |
| コンパイル時間 | 1,149 ms |
| コンパイル使用メモリ | 82,324 KB |
| 実行使用メモリ | 77,220 KB |
| 最終ジャッジ日時 | 2024-12-28 05:18:29 |
| 合計ジャッジ時間 | 1,981 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 2 WA * 8 |
ソースコード
import sys
input = lambda : sys.stdin.readline().rstrip()
sys.setrecursionlimit(2*10**5+10)
write = lambda x: sys.stdout.write(x+"\n")
debug = lambda x: sys.stderr.write(x+"\n")
writef = lambda x: print("{:.12f}".format(x))
def hurui(n):
"""線形篩
pl: 素数のリスト
mpf: iを割り切る最小の素因数
"""
pl = []
mpf = [None]*(n+1)
for d in range(2,n+1):
if mpf[d] is None:
mpf[d] = d
pl.append(d)
for p in pl:
if p*d>n or p>mpf[d]:
break
mpf[p*d] = p
return pl, mpf
from collections import defaultdict
def factor(num):
d = defaultdict(int)
if num==1:
d.update({1:1})
return d
while num>1:
d[mpf[num]] += 1
num //= mpf[num]
return d
from math import gcd
def rho(n):
"""nの素数判定
素数のとき0, 合成数の時見つかった約数を返す
"""
y = 2
l = [1,2]
i = 0
while 1:
x = l[i]
g = gcd(abs(x-y), n)
if g==n:
return 0
elif g>1:
return g
y = (y*y + 1) % n
l.append(y)
y = (y*y + 1) % n
l.append(y)
i += 1
def sub0(n):
for i in range(m):
p = pl[i]
for j in range(m):
q = pl[j]
pp = p
for a in range(1,100):
if pp>n:
break
qq = q
for b in range(1,100):
if qq>n:
break
if pp+qq==n:
print("Yes")
# print(p,q,a,b)
return
qq *= q
# print(pp,qq)
pp *= p
print("No")
def sub1(n):
if n%2==0:
print("Yes")
else:
pp = 2
for a in range(1,100):
if pp>n:
print("No")
return
v = n - pp
# print(v)
for b in range(1,100):
val = v**(1/b)
if int(val)==val:
# print(val)
if rho(int(val))==0:
print("Yes")
return
pp *= 2
q = int(input())
pl, mpf = hurui(5000)
m = len(pl)
for i in range(q):
n = int(input())
if n<50:
sub0(n)
else:
sub1(n)