오일러 프로젝트 28 번

오일러 프로젝트 28 번

숫자 1부터 시작해서 우측으로부터 시계방향으로 감아 5×5 행렬을 만들면 아래와 같이 됩니다.

        21 22 23 24 25
        20  7  8  9 10
        19  6  1  2 11
        18  5  4  3 12
        17 16 15 14 13

여기서 대각선상의 숫자를 모두 더한 값은 101 입니다.

같은 방식으로 1001×1001 행렬을 만들었을 때, 대각선상의 숫자를 더하면 얼마가 됩니까?

http://euler.synap.co.kr/prob_detail.php?id=28

1부터 시작해서 규칙을 따라가보면 쉬운데, 각각의 다음 모서리의 숫자를 구한다. 어이없을만큼 간단한 문제다.

  1. 모서리끼리의 간격은 4회 시행 후 2씩 증가한다.
  2. 한 바퀴를 돌면 변의 길이가 2씩 커지니 1001까지 가려면 500바퀴를 돌면 된다.
def e028():
    a, s, k = 1, 1, 2

    for _ in range(1, 501):
        for _ in range(4):
            a += k
            s += a
        k += 2

    print(s)
%time e028()
# 669171001
# Wall time: 1e+03 µs