Ruby 问个有关 arguments 应用的问题

robotik · 2012年04月13日 · 最后由 qisine 回复于 2012年04月15日 · 2811 次阅读

我想编写一个求一定范围素数的程序,带有两个 arguments,a,b。要求运行时输入两个范围,然后求出这两个数字范围间的素数。我自己写的是下面这样字,但是是错误的。我也不知道错在哪里了,感觉是变量的问题,求指教!

a,b=ARGV
def prime (a,b)
 for i in 2..b
    f=true
    for p in 2...i
        if i%p==0
            f =!f
            break
        end
    end
   print i, "--" if f    
  end
end

sushu=prime(a,b)
p "the prime zweischen #{a} and #{b} is #{sushu}."

刚刚想了老半天,我给一个素数的 Ruby 实现:


def prime(m = 2, n)
  (m..n).select do |number|
    for base in (2..number-1)
      break if (number % base == 0)
    end
  end
end

p prime(10, 20)         # => [11, 13, 17, 19]







def prime?(n)
  (n-1).downto(2) do |i|
    return false if n % i == 0
  end
  return true
end

def f(n1,n2)
  n1.upto(n2) do |i|
    puts i if prime?(i)
  end
end

f(2,20)

a,b = ARGV
f(a.to_i,b.to_i)

假如你的这个代码是在真是的程序里使用的,建议你用个效率更高的 algorithm, 比方 => http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes

需要 登录 后方可回复, 如果你还没有账号请 注册新账号