【问题标题】:Ruby - Prime Number calculatorRuby - 素数计算器
【发布时间】:2013-04-22 22:14:01
【问题描述】:

我需要一些反馈来弄清楚为什么我在屏幕上的方法中无法使用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

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

【问题讨论】:

  • 为了更好的效率,在你的is_prime?里面的loop,把它改成if i*i &gt; numreturn trueelsif ...
  • 严谨的压痕会让你的生活更美好。 i = 2is_prime_array = [] 应该是 2 个空格。

标签: ruby primes


【解决方案1】:
i = 0
count = 0
loop do
  if is_prime(i)
    count += 1
  end

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

简单的方法:)

【讨论】:

  • 好建议。我实现了它,但它仍然不会返回任何东西。
【解决方案2】:

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

你在哪里

is_prime_array[1001]

改成

is_prime_array[1000]

你可以这样做:

puts primes
 => 7927

你也可以

is_prime_array.last

而不是特定的索引号。

【讨论】:

  • 即使经过 30 多年的编码,我仍然在新项目中犯同样的错误。这就是我看到这个的原因。
【解决方案3】:

你想“放”什么?我注意到的第一件事是文件中没有对primes 的调用,因此如果您尝试自行运行此代码,则不会发生任何事情。也许这就是为什么您看不到任何打印的原因。

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

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

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

【讨论】:

  • 对不起,我只写了脚本中的方法,而不是我试图调用它们的地方。即使我写了puts primes 之类的东西,它仍然没有返回任何内容。我什至没有收到错误。
  • 我使用添加的 puts 语句运行您的代码,并在我的本地机器上使用 Ruby 1.9.3 调用 primes() —— puts 确实有效。确保您从某个地方调用该函数(如果它在另一个函数中,请确保正在调用该函数)。我在文件底部添加了primes() 来测试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 2011-12-05
  • 2014-04-28
  • 1970-01-01
相关资源
最近更新 更多