エラトステネスの篩もよいけれど、別の問題もやろうよ。ということで「完全数」です。 def perfect(n = 100, &block) sum = Array.new(n + 1, 1) (2..n).each do |i| if i == sum[i] block.call(i) end k = i + i while k <= n sum[k] += i k += i end end s…
普通に実装。(追記:不等号、間違っていたので直しました)。 def prime(n = 100, &block) is_prime = Array.new(n + 1, true) is_prime[0] = false is_prime[1] = false (2..n).each do |p| next unless is_prime[p] block.call(p) k = p + p while k <= n …
ObjectSpace.each_object(Class)で全クラスをvisitできます。 ObjectSpace.each_object(Class) do |o| p o end全クラスではなくExceptionクラスの子孫クラスだけを調べたいならば、次のようにします。 ObjectSpace.each_object(Class) do |o| if o < Excepti…
Haskellで書いた組み合わせの数をRubyで書いてみる。 def c(n,k) d(n,k).div(d(k,k)) end def d(n,k) (n-k+1..n).inject(1) {|result,item| result * item} end p c(1000,100) #=> 63850511926305130236698511142022274281262900693853331776286816221524376…