프로젝트 오일러 27

오일러는 다음과 같은 멋진 2차식을 제시했습니다.
n2 + n + 41
이 식의 n에다 0부터 39 사이의 숫자를 넣으면, 그 결과는 모두 소수가 됩니다.
하지만 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 값 나온 거 그냥 계산해서 답을 적어 뭔가 찜찜하지만 이렇게 밖에 못하겠다 ㅠ 재밌었다.

댓글

이 블로그의 인기 게시물

윈도우 설치에서 파티션 설정 오류(NTFS)

[exploit writing] 1_스택 기반 오버플로우 (1) First

하둡 설치 오류 정리