프로젝트 오일러 44번
pentagonal 수 두 개를 더해도 pentagonal, 차이도 pentagonal이 되는 것 중, 최소의 "차이"는?
p_k - p_j = p_l
p_k = p_l + p_j
p_k + p_j = p_m
라고 해 보자.
l < j 조건을 만족하는 (j,l) 쌍에 대해서( (2,1),(3,1),(3,2),...) 적당한 p_k, p_m 이 존재하는지 찾아본다.
p_k - p_j = p_l 이면 p_k - p_l = p_j 도 따라서 성립한다. 혹시 p_k + p_l = p_m이 되는 걸 찾아도 좋다.
from math import sqrt
j, cont = 1, 1
while cont == 1:
for l in range(1,j):
c = 3*(l*l + j*j) - l - j
k = (1 + sqrt(1 + 12*c))/6
if k == int(k):
c2 = 3*(k*k + j*j) - k - j
m = (1 + sqrt(1 + 12*c2))/6
if m == int(m):
print l*(3*l-1)/2
cont = 0
c2 = 3*(k*k + l*l) - k - l
m = (1 + sqrt(1 + 12*c2))/6
if m == int(m):
print j*(3*j-1)/2
cont = 0
j += 1
1.6초. 예상보다 큰 숫자에서 답이 나왔으니 이 정도 시간이면 받아들이기로 하자.
No comments:
Post a Comment