結果
| 問題 |
No.2074 Product is Square ?
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-09-16 21:53:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,463 bytes |
| コンパイル時間 | 369 ms |
| コンパイル使用メモリ | 82,364 KB |
| 実行使用メモリ | 157,256 KB |
| 最終ジャッジ日時 | 2024-12-21 19:32:09 |
| 合計ジャッジ時間 | 43,244 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 28 TLE * 5 |
ソースコード
import sys, random
input = lambda : sys.stdin.readline().rstrip()
write = lambda x: sys.stdout.write(x+"\n"); writef = lambda x: print("{:.12f}".format(x))
debug = lambda x: sys.stderr.write(x+"\n")
YES="Yes"; NO="No"; pans = lambda v: print(YES if v else NO); INF=10**18
LI = lambda : list(map(int, input().split())); II=lambda : int(input())
def debug(_l_):
for s in _l_.split():
print(f"{s}={eval(s)}", end=" ")
print()
def dlist(*l, fill=0):
if len(l)==1:
return [fill]*l[0]
ll = l[1:]
return [dlist(*ll, fill=fill) for _ in range(l[0])]
def isqrt(n):
"""x*x<=nなる最大のx
"""
x,y = n, (n+1)//2
while y<x:
x,y = y, (y + n//y) // 2
return x
from math import gcd
import random
def is_prime(n):
"""miller_rabinによる素数判定
※ 1は素数と扱う
"""
l = [2,3,5,7,11,13,17,19,23,29,31,37]
if n==1 or n in l:
return True
d = n-1
s = 0
while d%2==0:
s += 1
d //= 2
for a in l:
v = pow(a,d,n)
if v==1 or v==n-1:
continue
for _ in range(s):
v = v*v % n
if v==n-1:
break
else:
return False
return True
def rho(n):
"""nを割り切る3以上の素数を返す(素数のときnを返す)
"""
if is_prime(n):
return n
while True:
x = y = random.randint(1,n-1)
g = 1
while g==1:
x = (x*x - 3) % n
y = (y*y - 3) % n
y = (y*y - 3) % n
g = gcd((x-y), n)
if g>1:
return rho(g)
def factor(n):
"""高速な素因数分解
"""
if n==1:
return {}
f = is_prime(n)
if f:
return {n:1}
ans = {}
while n%2==0:
ans.setdefault(2, 0)
ans[2] += 1
n //= 2
v = rho(n)
while v!=n and n>1:
ans.setdefault(v, 0)
while n%v==0:
n //= v
ans[v] += 1
if n>3 and is_prime(n):
ans.setdefault(n,0)
ans[n] += 1
return ans
v = rho(n)
if n>1:
ans.setdefault(n, 0)
ans[n] += 1
return ans
t = II()
for _ in range(t):
n = int(input())
a = list(map(int, input().split()))
d = {}
for val in a:
f = factor(val)
for k,v in f.items():
d.setdefault(k, 0)
d[k] += v
pans(all((v%2==0 for v in d.values())))