2012年7月27日金曜日

プロジェクトオイラー Problem29

「プロジェクト オイラー」の問題をpythonでやってみます。

出典: Project Euler (日本語翻訳サイト)
参考:
サイエンスもの置き場 プロジェクトオイラーを遊び倒すガイド(初級編)

Problem 29
2 ≤ a ≤ 5 と 2 ≤ b ≤ 5について, abを全て考えてみよう:
  • 22=4, 23=8, 24=16, 25=32
  • 32=9, 33=27, 34=81, 35=243
  • 42=16, 43=64, 44=256, 45=1024
  • 52=25, 53=125, 54=625, 55=3125
これらを小さい順に並べ, 同じ数を除いたとすると, 15個の項を得る:
4, 8, 9, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125

2 ≤ a ≤ 100, 2 ≤ b ≤ 100 で同じことをしたときいくつの異なる項が存在するか?


私の解答例は以下です。

def f(m, n):
	L = []
	for a in xrange(m, n+1):
		for b in xrange(m, n+1):
			L.append(a**b)
	return len(set(L))
	
print f(2,100)

1.関数f(m, n)
・m以上n以下のa,bについて、aのb乗の値の異なる項の数を返します。


・for a in xrange(m, n+1):
  for b in xrange(m, n+1):
 ループ変数a, bはそれぞれm以上n以下の値をとる二重ループです。


・L.append(a**b)
 リストLにaのb乗の値を全て設定します。


・return len(set(L))
 set型は、重複するオブジェクトを持たない、順序付けられていない要素の集まりのことです。
 set型へ型変換することでリストLから重複を除きます。
 その後、len関数で要素数を数えて返します。



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

0 件のコメント:

コメントを投稿