LoginSignup
1
1

More than 3 years have passed since last update.

Project Euler 028を解いてみる。「螺旋状に並んだ数の対角線」

Last updated at Posted at 2019-09-26

Project Euler 028

028

1から初めて右方向に進み時計回りに数字を増やしていき, 5×5の螺旋が以下のように生成される:
スクリーンショット 2019-09-26 23.09.58.png

両対角線上の数字の合計は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

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1