반응형
이 프로그램은 사실 원하는 배열을 잡고, 숫자를 배열한 후에 대각선의 합을 구해도 됩니다.
그렇게 한다고 해서 시간이 엄청 걸리는 것도 아니니 말이죠.
그러나 처음 제가 이 프로젝트 오일러 글들을 쓰면서, 어떻게 하면 보다 빠르게 계산할 것인가를 고민했기 때문에, 이 문제 역시 복잡도를 낮추어 계산하도록 하였습니다.
1부터 N까지의 합, 제곱 합 등의 공식을 도출할 줄 안다면, 이 문제 역시 간단하게 하나의 식으로 만들 수 있습니다.
여기서는 다음과 같은 식이 나오게 됩니다.
이 수식에 따라서 구한 프로그램은 다음과 같습니다.
역시 이 프로그램은 참고용으로만 해주세요.
#include <stdio.h> int main() { int n; scanf("%d", &n); n = (n-1)/2; printf("Ans = %d\n", 1+8*n*(n+1)*(2*n+1)/3+2*n*(n+1)+4*n); }
728x90
'Programming > Project Euler' 카테고리의 다른 글
30. 프로젝트 오일러 #30 : 각 자릿수의 5승의 합 (0) | 2015.03.30 |
---|---|
프로젝트 오일러 #29 서로 다른 n제곱 개수 (0) | 2015.03.07 |
27. 프로젝트 오일러 #27 : 2차식 소수 생성 (0) | 2015.02.28 |
26. 프로젝트 오일러 #26 : 순환고리 (0) | 2015.02.27 |
25. 프로젝트 오일러 #25 : 1000자리 피보나치 수열항 구하기 (0) | 2015.02.17 |
댓글