結果
問題 |
No.308 素数は通れません
|
ユーザー |
![]() |
提出日時 | 2019-03-31 10:31:44 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 49 ms / 1,000 ms |
コード長 | 1,374 bytes |
コンパイル時間 | 279 ms |
コンパイル使用メモリ | 82,408 KB |
実行使用メモリ | 56,576 KB |
最終ジャッジ日時 | 2024-11-21 06:27:01 |
合計ジャッジ時間 | 7,104 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 107 |
ソースコード
import random import sys def is_prime(n): if n == 2: return True if n == 1 or n & 1 == 0: return False d = (n - 1) >> 1 while d & 1 == 0: d >>= 1 for k in range(10): a = random.randint(1, n - 1) t = d y = pow(a, t, n) while t != n - 1 and y != 1 and y != n - 1: y = (y * y) % n t <<= 1 if y != n - 1 and t & 1 == 0: return False return True n=int(input()) used=[False for i in range(102)] isprime=[False for i in range(102)] for i in range(3, 102, 2): isprime[i]=True isprime[2]=True for i in range(3, 102): if isprime[i]: for j in range(2*i, 102, i): isprime[j]=False def dfs(x, w): used[x]=True if x%w!=1 and (not used[x-1]) and (not isprime[x-1]): dfs(x-1, w) if x%w!=0 and x+1<=n and (not used[x+1]) and (not isprime[x+1]): dfs(x+1, w) if x>w and (not used[x-w]) and (not isprime[x-w]): dfs(x-w, w) if x+w<=n and (not used[x+w]) and (not isprime[x+w]): dfs(x+w, w) def solve(w): for i in range(1, n+1): used[i]=False dfs(1, w) return used[n] if n<=100: for i in range(3, n): if solve(i): print(i) sys.exit() else: if n%8!=1: print(8) elif not is_prime(n-8): print(8) else: print(14)