結果
| 問題 |
No.774 tatyamと素数大富豪
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-06-16 22:05:09 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,917 bytes |
| コンパイル時間 | 430 ms |
| コンパイル使用メモリ | 82,528 KB |
| 実行使用メモリ | 155,208 KB |
| 最終ジャッジ日時 | 2024-12-31 10:40:07 |
| 合計ジャッジ時間 | 27,541 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 5 |
| other | AC * 7 WA * 1 TLE * 6 |
ソースコード
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))
from math import gcd
import random
def is_prime(n):
"""miller_rabinによる素数判定
"""
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_fast(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
n = int(input())
a = list(map(int, input().split()))
from itertools import permutations as ps
ans = -1
for v in ps(range(n)):
val = int("".join((str(a[i]) for i in v)))
if is_prime(val):
ans = max(ans, val)
print(ans)