LoginSignup
2
1

More than 3 years have passed since last update.

【Python】 プロジェクトオイラー Problem 1

Last updated at Posted at 2019-07-02

10未満の自然数のうち、3もしくは5の倍数になっているものは3,5,6,9の4つがあり、これらの合計は23になる。

同じようにして、1000未満の3か5の倍数みなっている数字の合計を求めよ。

とりあえず答えを出すまでの流れは

1.1000未満の3と5の倍数を抜き出す
2.抜き出したものを合計する

で、終わり

1問目だから難易度は控えめなはず

とりあえず1000未満の数を抜き出したいからrange関数を使えばうまくいくと思う

3と5の倍数はifを使って条件付ければ抜き出せそう

ということでプログラミングに起こしてみる

sanbai = 0
for sen in range(1000):
    if sen % 3 == 0:
        sanbai += sen
print(sanbai)

166833

これで1000未満の3の倍数の合計が求められたはず
同じことを5の倍数でもやってみる

gobai = 0
for sen_a in range(1000):
    if sen_a % 5 == 0:
        gobai += sen_a
print(gobai)

99500

これで5の倍数も抜き出した

ので、組み合わせてみる

sanbai = 0
gobai = 0
for sen_a in range(1000):
    if sen_a % 3 == 0:
        sanbai += sen_a
for sen_b in range(1000):
    if sen_b % 5 == 0:
        gobai += sen_b
print(gobai + sanbai)

266333

これで当っているのだろうか...

どうも違うらしい

[http://kingyojima.net/pje/001.html]

ここの回答によると答えは233168らしい

どこが違うのだろうか...

なるほど、

3倍と5倍を抜き出すときにそれぞれ3で割れる数と5で割れる数を抜き出していたので、15とか30とかのそれぞれの倍数がかぶっている値が重複していたので答えが大きい数字になっていたみたい

なので5倍を抜き出す式に

for sen_b in range(1000):
    if sen_b % 5 == 0 and sen_b % 3 != 0:

これでうまくいくはず

sanbai = 0
gobai = 0
for sen_a in range(1000):
    if sen_a % 3 == 0:
        sanbai += sen_a
for sen_b in range(1000):
    if sen_b % 5 == 0 and sen_b % 3 != 0:
        gobai += sen_b
print(gobai + sanbai)

233168

これで正解のはず

Problem2はこちらから

2
1
2

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
2
1