통계, IT, AI

[Project Euler] 45. Triangular, pentagonal, and hexagonal 본문

IT/PROJECT_EULER

[Project Euler] 45. Triangular, pentagonal, and hexagonal

Harold_Finch 2017. 5. 7. 18:13

1. 개요

  문제는 이곳에서 확인할 수 있다. 양의 정수 \(n\)에 대하여 Triangle, pentagonal 그리고 hexagonal number는 다음과 같이 정의된다.


 Triangle

 

\(T_n=n(n+1)/2\) 

 1, 3, 6, 10, 15, ...

 Pentagonal

 

\(P_n=n(3n-1)/2\)

 1, 5, 12, 22, 35, ...

 Hexagonal

 

\(H_n=n(2n-1)\)

 1, 6, 15, 28, 45, ...


  이 세가지 수열은 서로 같은 수를 가질 수도 있다. 즉, \(40755=T_{285}=P_{165}=H_{143}\)이다. 40755보다 크면서 Triangle, pentagonal 그리고 hexagonal number인 수를 찾는 것이 목표이다.

2. 구현

  문제의 범위를 좁히기 위하여 Hexagonal number를 기준으로 찾는다. 어떤 Hexagonal number가 Triangle 그리고 Pentagonal number가 되는 지는 2차 방정식의 근의 공식을 사용하여 판별한다. 


# -*- coding: utf-8 -*-
import math as m

h_idx = 0

while True:

	h_idx += 1
	h_number = h_idx*(2*h_idx-1)

	if (m.sqrt(24*h_number+1)+1) % 6 == 0 and (m.sqrt(8*h_number+1)-1) % 2 == 0 and h_number > 40755:
		
		print('T_{t_idx} = P_{p_idx} = H_{h_idx} = {answer}'.format(
			t_idx=int((m.sqrt(8*h_number+1)-1)//2),
			p_idx=int((m.sqrt(24*h_number+1)+1)//6),
			h_idx=h_idx,
			answer=h_number))
		break

답은 1533776805이다.

Comments