Project Euler 028
1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される:
![スクリーンショット 2019-09-26 23.09.58.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F346690%2Fef3b5b20-f0b4-7984-028f-83cae5d77a76.png?ixlib=rb-4.0.0&auto=format&gif-q=60&q=75&s=0d59ad7f97faa4542eca180c128ed96d)
両対角線上の数字の合計は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