キミならどう書く 2.0 - ROUND 1 -

お題は「100までの整数から素数を列挙せよ」。via Yuguiさんとこ

Rails厨の回答。

#!/usr/bin/env ruby

require_gem 'activesupport'
require 'active_support'

class Fixnum
  @@primes = []
  def prime?
    return false if 1 == self

    if @@primes.empty?
      @@primes.push(self)
    else
      @@primes.all?{|n| (self % n) > 0 } ? @@primes.push(self) : false
    end
  end
end

p (1..100).select(&:prime?)
  • 素数は1と自身以外の素数で割り切れない整数、という中学定義に素直に。文系だし。
    • アルゴリズムとしてかなり遅いのが難点。10000くらいになると苦しい。
  • ActiveSupportはSymbol#to_procを使いたいだけ。
2006/06/17 11:20 ちょっと速くした。長くなっちゃったけど。