Project Euler ( Problem 29 )
■ruby版
#!/usr/bin/ruby
zz = z = []
a = 2..100
b = 2..100
p a
p b
a.each{ | x |
b.each{ | y |
z << x ** y
}
}
zz = z.sort.uniq
p zz.length # 回答
p zz # 確認
__END__
2..100
2..100
9183
[4, 8, 9, 16, 25, 27, 32, 36, 49, 64, 81, 100, 121, 125, 128, 144, 169,
196, 216, 225, 243, 256, 289
...
,100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
■haskell版
思考過程(試行過程)を記載しています。
x^yを導出し、結果をソートする。
sort [x^y | x <-[2..5], y<-[2..5]]
[4,8,9,16,16,25,27,32,64,81,125,243,256,625,1024,3125]
x^yを導出し、結果の重複を取り除く。
nub [x^y | x <-[2..5], y<-[2..5]]
[4,8,16,32,9,27,81,243,64,256,1024,25,125,625,3125]
x^yの結果から重複を取り除き、その数を算出する。
length $ nub [x^y | x <-[2..5], y<-[2..5]]
15
xとyを問題で与えられた上限に変更。
length $ nub [x^y | x <-[2..100], y<-[2..100]]
9183
xとyを問題で与えられた上限に変更した場合の数列を見たいので、出力。重複を取り除きソート。途中省略
sort $ nub [x^y | x <-[2..100], y<-[2..100]]
[4,8,9,16,25,27,32,36,49,64,81,100,121,125,128,144,169,196,216,225,243,256,289,324,343,361,400,441,484,512,529,576,625,676,729,784,841,900,961,1000,1024,
...
,100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000]
素人考えで作ったものを公開の場所に置く是非には迷うが、とりあえず自分の記録として残しておく。
Comments