【问题标题】:Prime numbers without definitions and classes, just loops没有定义和类的素数,只是循环
【发布时间】:2017-03-01 02:15:13
【问题描述】:

我正在尝试输入任何数字并检查素数。我试图避免类和定义。我试图只使用循环。我的代码如下所示。

puts "What number would you like to find the largest prime factor?: "
lastnum = gets.to_i
puts "Number to find the largest prime factor is #{lastnum}"
n = 2
while (n <= lastnum)
  if n % 2 == 0
    puts "#{n} is not a prime"
  elsif n % Math.sqrt(n) == 0
    puts "#{n} is not a prime, sqrt rooted"
  else
    puts "#{n} is a prime"
  end
  n += 1
end

如果我输入100,我会在我的素数列表中得到诸如99 之类的数字。我可以在代码中添加或删除一些东西吗?如果有一种有效的方法并且我应该摆脱我正在做的事情,我也会考虑这种帮助。

【问题讨论】:

  • 您的代码远未检查素数。它只检查一个数字是否为偶数或是否可被其平方根整除。
  • 你的句子 "What number ... the largest prime factor?""Number to ... the largest prime factor is ..." 不合语法。他们应该是"... the largest prime factor of ..."

标签: ruby primes


【解决方案1】:

这是一个未使用方法的最大素数脚本。

input = 100
result = 2.upto(input - 1).select do |test_num|
  2.upto(test_num - 1).none? do |test_divider|
    (test_num % test_divider).zero?
  end
end.max

puts result
# => 97

【讨论】:

  • 有 10 条显式和 1 条隐式消息发送,发送 8 (9) 条不同的消息,这些消息将被分派到至少代码中的 8 (9) 种不同的方法,可能更多。这仅计算直接在您的代码中发送的消息,显然这些方法中的任何一个都会依次调用调用其他方法的其他方法……等等。我想说,“没有方法”有点牵强。
【解决方案2】:

输入最高的范围,直到你想找到最高的素数。

lastnum = 100
(1..lastnum).reverse_each do |num|
   if (2..num/2).none?{|i| num % i == 0}
     puts num
     break
   end
end

在这里,我们得到 lastnum var 的最高范围,我们检查素数。按降序(此处为 100 到 1)并除以该编号。从2到一半没有。每当我们得到我们的第一个素数时。 (最高)我们停止条件循环并返回最高质数。

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多