红宝石 - 素数计算器

时间:2013-04-29 09:35:02

标签: ruby primes

我需要一些反馈来弄清楚为什么我在屏幕上的方法中无法putsprint。这是我写的一个简单的脚本,用于解决找到第1001个素数的问题。感谢

def primes
  # iterates through numbers until it has the 1001th prime number and returns it.
  # I chose to create the num_primes variable instead of counting the number of 
  # elements in in_prime_array every iteration
  # based upon a guess that it would be faster to check.

is_prime_array = []
  num_primes = 0
  i = 2
  loop do
    is_prime_array << i && num_primes += 1 if is_prime?(i) == true 
    i += 1
    break if num_primes == 1001
    end
  is_prime_array[1001]
end


def is_prime? (num)
# Checks to see if the individual number given is a prime number or not.
i = 2
  loop do
    if i == num
      return true
    elsif num % i == 0
      return false
    else
      i += 1
    end
  end
end

感谢您的帮助!


修改


我接受了你的建议,尝试了这段代码:

def is_prime? (num)
  # Checks to see if the individual number given is a prime number or not.
  i = 2
  loop do
    if i == num
      return true
    elsif num % i == 0
      return false
    else
      i += 1
    end
  end
end

i = 0
count = 0
loop do
  count += 1 if is_prime?(x)
  puts "#{i}" if count == 1001
  break
end

它仍然没有返回任何内容。 Hummm

3 个答案:

答案 0 :(得分:2)

i = 0
count = 0
loop do
  if is_prime(i)
    count += 1
  end

  if count == 10001
    puts "#{i}"
    break
  end
end

简单方法:)

答案 1 :(得分:1)

这是一个错误的错误。如果数组中有1001个元素,则最后一个元素将位于索引1000处。

你在哪里

is_prime_array[1001]

将其更改为

is_prime_array[1000]

你可以这样做:

puts primes
 => 7927

你也可以

is_prime_array.last

而不是特定的索引号。

答案 2 :(得分:1)

你想要“放”什么?我注意到的第一件事是文件中没有调用primes,所以如果你试图自己运行这段代码就不会发生任何事情。也许这就是你没有看到任何印刷品的原因。

以下是如何在循环中打印一些变量的示例:

loop do
  ...
  puts "At iteration #{i}, we have prime=#{is_prime?(i)}"

如果您不知道,在字符串中包含#{<statement goes here>}的语句与将<statement goes here>的返回值附加到该位置的字符串相同。这与Java等语言中的"Str " + blah + " rest of str"相同。