프로젝트 오일러 27
오일러는 다음과 같은 멋진 2차식을 제시했습니다.
n2 + n + 41
이 식의 n에다 0부터 39 사이의 숫자를 넣으면, 그 결과는 모두 소수가 됩니다.
하지만 n = 40일 때의 값 402 + 40 + 41 은 40×(40 + 1) + 41 이므로 41로 나누어지고, n = 41일 때 역시 412 + 41 + 41 이므로 소수가 아닙니다.
하지만 n = 40일 때의 값 402 + 40 + 41 은 40×(40 + 1) + 41 이므로 41로 나누어지고, n = 41일 때 역시 412 + 41 + 41 이므로 소수가 아닙니다.
컴퓨터의 발전에 힘입어 n2 − 79n + 1601 이라는 엄청난 2차식이 발견되었는데, 이것은 n이 0에서 79 사이일 때 모두 80개의 소수를 만들어냅니다. 이 식의 계수의 곱은 -79 × 1601 = -126479가 됩니다.
아래와 같은 모양의 2차식이 있다고 가정했을 때,
n2 + an + b (단 | a | < 1000, | b | < 1000)
0부터 시작하는 연속된 n에 대해 가장 많은 소수를 만들어내는 2차식을 찾아서, 그 계수 a와 b의 곱을 구하세요.
-------------------------------------------------------------------------------import math
def get_primes(n):
numbers = set(range(n, 1, -1))
primes = []
while numbers:
p = numbers.pop()
primes.append(p)
numbers.difference_update(set(range(p*2, n+1, p)))
return primes
def formula(k,a,b):
result=k**2+a*k+b
return result
def isPrime(n):
if n<0: p=""> return False
bPrime = True
for j in range(2,int(math.sqrt(n))+1):
if n%j==0:
bPrime = False
break
return bPrime
a=list()
k=0
max=0
first=0
for i in range(-1000,1001):
a.append(i)
for p in get_primes(1000):
for q in a:
while 1:
if isPrime(formula(k,q,p))==True:
k=k+1
else:
break
if first==0:
max=k
continue
elif k>max:
max=k
print max,q,p
k=0
first=first+1
------------------------------------------------------------------------------
처음으로 함수를 만들어서 한 것 같다. 마지막에 딱 정답만 나오지 않고 마지막 max,q,p 값 나온 거 그냥 계산해서 답을 적어 뭔가 찜찜하지만 이렇게 밖에 못하겠다 ㅠ 재밌었다.
0:>
댓글
댓글 쓰기