Project Euler 028
1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される:
両対角線上の数字の合計は101であることが確かめられる.
1001×1001の螺旋を同じ方法で生成したとき, 対角線上の数字の和はいくつか?
->次の問題
考え方
当直で呼ばれ、時間も元気もなくなったので定番のゴリ押しで行きます(^q^)
最も内側の四角形は3,5,7,9と2ずつ増え、その1つ外側では13,17,21,25と4ずつ増えます。外周が1つ外側に行くと辺の長さは2ずつ増えるので、それぞれの角の差も2ずつ増えていきます。
これをコードにして1001まで回します。
コード
euler028.py
def main():
num = 1 # 対角線上の数
answer = 1 # 答え用の変数
for i in range(2, 1001, 2): # iは2ずつ増える
for _ in range(4):
num += i # 対角線の数を計算し、
answer += num # 合計に足す
print(answer)
if __name__ == '__main__':
from time import time as t
st = t()
main()
print(t() - st, 'sec')
paizaにて実行
結果 669171001 0.0002090930938720703 sec