43 lines
743 B
Python
43 lines
743 B
Python
|
#!/usr/bin/env python3
|
||
|
|
||
|
def primes(n):
|
||
|
sieve = [True] * n
|
||
|
for p in range(2, int(n**0.5)):
|
||
|
if not sieve[p]:
|
||
|
continue
|
||
|
for i in range(p**2, n, p):
|
||
|
sieve[i] = False
|
||
|
return [False, False] + sieve[2:]
|
||
|
|
||
|
def is_prime(p):
|
||
|
if p >= len(sieve):
|
||
|
raise LimitError
|
||
|
return sieve[p]
|
||
|
|
||
|
def getnum(n, c):
|
||
|
m = n//6
|
||
|
if c:
|
||
|
return 3*(m-1)*m + 2
|
||
|
return 3*m*(m+1) + 1
|
||
|
|
||
|
sieve = primes(10**6)
|
||
|
target = 2000
|
||
|
|
||
|
c = 2
|
||
|
n = 6
|
||
|
|
||
|
while c < target:
|
||
|
n += 6
|
||
|
if not is_prime(n-1):
|
||
|
continue
|
||
|
c += is_prime(n+1) and is_prime(2*n + 5)
|
||
|
if c == target:
|
||
|
flag = True
|
||
|
break
|
||
|
c += is_prime(n+5) and is_prime(2*n-7)
|
||
|
else:
|
||
|
flag = False
|
||
|
|
||
|
print(getnum(n, flag))
|
||
|
|