2012年8月19日日曜日

Project Euler - Probrem 48

Project Euler(プロジェクト オイラー)の問題をpythonでやってみます。

出典: Project Euler(日本語 翻訳サイト)
   ProjectEuler.net(英語サイト)

Problem 48
次の式は、11 + 22 + 33 + ... + 1010 = 10405071317 である。
では、11 + 22 + 33 + ... + 10001000 の最後の10桁を求めよ。

-----


私の解答例は以下です。畳んでいます。
def f(n): return str(sum([i**i for i in xrange(1, n+1)]))

s = f(1000)
print s[-10:]


pythonでは多バイト長の数値であっても通常の数値として扱うことができます。

1.関数f(n)
・1からnまでの数字のその数字分の累乗の和を文字型にして返します

・return str(sum([i**i for i in xrange(1, n+1)]))
 内包表記です。
 for文で1からnまでの数字をループ変数iとして、forの前に渡します。
 **演算子は累乗です。i**iで、iのi乗値をリストにためます。
 sum関数で合計し、さらにstr関数で文字型に変換しておきます。

2.関数の外
・s = f(1000)
 引数1000で関数fを呼び出します。なお、この戻り値は3001桁ありました。

・print s[-10:]
 上記で取得したsの右から10桁分を取り出します。

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

0 件のコメント:

コメントを投稿