삼각수, 오각수, 육각수라는 것은 앞에 #44(http://sdev.tistory.com/224)에서 설명한 것과 같이 도형을 그릴 때, 발생하는 점들의 갯수입니다.
이 문제에서 원하는 것은 40755 다음에 나타나는, 삼각수이자, 오각수, 그리고 육각수인 숫자를 찾는 것입니다.
삼각수를 기준으로 하든지, 육각수를 기준으로 하든지, 다른 숫자들을 맞추어 나가면 됩니다.
간단하게 공차식을 구해서 계산하는 것이 편하겠죠.
그래서 만들어진 소스는 다음과 같습니다.
#include <stdio.h>
#include <stdint.h>
int main()
{
uint64_t t = 40755, p = 40755, h = 40755;
uint64_t dt = 286, dp = 496, dh = 573;
t += dt; dt++;
while( 1 )
{
if( t < p ) { t += dt; dt++; }
else if( p < t ) { p += dp; dp += 3; }
else if( h < p ) { h += dh; dh += 4; }
else if( t < h ) { t += dt; dt++; }
else break;
}
printf("ans = %ju\n", t);
}
반응형
'Programming > Project Euler' 카테고리의 다른 글
47. 프로젝트 오일러 #47 : 서로 다른 소인수 (0) | 2016.06.01 |
---|---|
46. 프로젝트 오일러 #46 : 골드바흐의 다른 추측 (0) | 2016.05.31 |
프로젝트 오일러 #44 오각수 (0) | 2016.05.26 |
43. 프로젝트 오일러 #43 : 부분 문자열 나누어 떨어지기 (0) | 2016.05.25 |
42. 프로젝트 오일러 #42 : 삼각수 단어 (0) | 2016.05.24 |
댓글