2

我需要一些反馈来弄清楚为什么我不能puts或者print我的方法在屏幕上的任何东西。这是我编写的一个简单脚本,用于解决查找第 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

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

4

3 回答 3

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

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

简单的方法:)

于 2013-04-29T10:05:50.460 回答
1

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

你在哪里

is_prime_array[1001]

将其更改为

is_prime_array[1000]

你可以这样做:

puts primes
 => 7927

你也可以有

is_prime_array.last

而不是特定的索引号。

于 2013-04-29T09:45:07.887 回答
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"

于 2013-04-29T09:46:10.540 回答