結果
問題 | No.308 素数は通れません |
ユーザー |
![]() |
提出日時 | 2019-03-31 10:24:06 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 60 ms / 1,000 ms |
コード長 | 1,463 bytes |
コンパイル時間 | 396 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 67,584 KB |
最終ジャッジ日時 | 2024-11-21 06:22:09 |
合計ジャッジ時間 | 7,698 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 107 |
ソースコード
import randomimport sysdef is_prime(n):if n == 2: return Trueif n == 1 or n & 1 == 0: return Falsed = (n - 1) >> 1while d & 1 == 0:d >>= 1for k in range(10):a = random.randint(1, n - 1)t = dy = pow(a, t, n)while t != n - 1 and y != 1 and y != n - 1:y = (y * y) % nt <<= 1if y != n - 1 and t & 1 == 0:return Falsereturn Truen=int(input())used=[False for i in range(2002)]isprime=[False for i in range(2002)]for i in range(3, 2002, 2):isprime[i]=Trueisprime[2]=Truefor i in range(3, 2002):if isprime[i]:for j in range(2*i, 2002, i):isprime[j]=Falsedef dfs(x, w):used[x]=Trueif 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]=Falsedfs(1, w)return used[n]if n<=2000: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)elif n%14!=1:print(14)elif not is_prime(n-14):print(14)else:print(17)