LoginSignup
1
0

More than 3 years have passed since last update.

0.1ぐらいから始めるProjectEuler@python Problem 1

Last updated at Posted at 2019-07-09

Problem 1 「3と5の倍数」

というわけで、1問目書いていきます。
問題自体は非常に簡単ですね。

Problem_1.py
#10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.
#同じようにして, 1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.
a=int(999/3)
b=int(999/5)
c=int(999/15)
x=int(3*a)
y=int(5*b)
z=int(15*c)
d=((3+x)*a/2)
e=((5+y)*b/2)
f=((15+z)*c/2)
print(d+e-f)

解 233168.0
はい、私はこう書きました。グローバル関数いっぱいですね、はい
後から知りましたが、普通に1行でこのプログラムが書けるようですね。プログラムの奥の深さに俺氏とても驚きました。

解き方の解説をしていきます。

a,b,cは3,5,15の1000未満の最大の約数を求めてます。
x,y,zは3,5,15の1000未満の最大の倍数を求めてます。
d,e,fは3,5,15の数の倍数の合計値を求めています。                              
具体的に言うと、最初と最後の倍数である数を足し、それを約数の半分の数でかけてあげることで合計値を求めています。
3を例に出すと、
3+6+9+・・・+996+999を3+999、6+996と、中心から対称の数を足して1002を作ります
そうすると約数の数の半分、1002ができるので、1002×約数の数の半分でかけてあげると倍数の合計値が出ます。

こんな感じですかね?もしわからないことやアドバイス等あればコメントしていただければと思います(答えるとは言っていない)
というわけで気が向いたら次のも見てってください。よろしくお願いします。

1
0
4

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
0