2012年4月12日木曜日

プロジェクトオイラー 問1

プロジェクトオイラーの問題をpythonでやってみます。
出典:
英語サイトは、Project Euler でネット検索してください。
日本語翻訳サイトは、プロジェクトオイラー日本語 でネット検索してください。



問1
10未満の自然数のうち、3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり、これらの合計は 23 になる。
同じようにして、1,000 未満の 3 か 5 の倍数になっている数字の合計を求めよ。



注意!!!
自力で解きたい人へ
以降の記述には解法に関するネタバレが含まれます。






私の解答例は以下のとおりです。
-----
def p(n,m): return sum([i for i in xrange(0, n, m)])
print p(1000, 3)+p(1000, 5)-p(1000, 15)
-----

1行目の関数p(n,m)の意味は以下の通りです。

0からnまでのm刻みの整数を発生させて、
そのすべての値を小さい順に要素に持つリストを作成し、
そのリスト内の値の合計値を返します。

つまり、「n未満のmの倍数の合計」を返します。

2行目で、1000未満の3の倍数の合計と、同じく5の倍数の合計を足し、
重複して足してしまった15の倍数の合計を引いて、コンソールに表示します。

解答はこのすぐ下の行です。文字の色を白にしてます。選択状態にすると見えます。
233168

(追記)
・20120716 ソースコード部分にSyntaxHighlighterを導入
・20130120 ネタバレ注意の追記など

0 件のコメント:

コメントを投稿