首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的红宝石编码找素数不起作用?

为什么我的红宝石编码找素数不起作用?
EN

Stack Overflow用户
提问于 2014-11-07 02:17:01
回答 3查看 2.6K关注 0票数 4

我想知道为什么我的代码不起作用。我是新的代码世界,所以如果有人可以为我打破这个问题,如何最好地解决它,谢谢!

我正在尝试创建一个程序,它将从我指定的数字列表中指示素数。

请告诉我为什么这两个代码不工作!我对第二段代码试图做什么感到困惑,因为我发现它是别人解决我的问题的方法。我对编码很陌生,但我喜欢它,所以要忍受我自己!

以下是我的简单代码:

代码语言:javascript
运行
复制
def is_prime?(*nums)

    i = 2
    nums.each do |num|
        while i < num
            if num % i == 0
                puts "#{num} is not a prime"
            else
                puts "#{num} is a prime"
            end
            i += 1
        end
    end
end

....Why,这不起作用吗?我怎么才能让它起作用?它一直给我一个奇怪的答案,因为它粘在我的第一个数字上,而且似乎没有处理我插入的下一个数字:

代码语言:javascript
运行
复制
puts is_prime?(21, 23, 17)

下面是我也无法正确运行的第二段代码。有人能把这里发生的事情弄清楚吗?我怎么才能让它起作用?

代码语言:javascript
运行
复制
def is_prime?(*nums)
    nums.each_with_object({}) do |num, hsh|
        hsh[num] = num > 1 && 2.upto(num - 1).none? {|i| num % i == 0}
    end
end

puts is_prime?(27, 13, 42)

无论如何,我知道这个问题有点令人困惑,但如果有人愿意输入他们的2美分,我会很感激的!最后,我该如何正确地将代码贴在问题板上呢?没有良师益友,我是如此的新,如此的困惑!

EN

Stack Overflow用户

回答已采纳

发布于 2014-11-07 03:04:31

你有一些问题。其中一个是在前面确定的:语句i = 2的位置。这是你的固定代码。

代码语言:javascript
运行
复制
def is_prime?(*nums)
    nums.each do |num|
    i = 2
      while i < num
        if num % i == 0
          puts "#{num} is not a prime"
        else
          puts "#{num} is a prime"
        end
        i += 1
      end
   end
end

num % i == 0确定数字不是素数时,并为此打印一条消息,然后继续检查它是否可以被整除--所有小于num的大数字。每次num % i == 0打印出它不是素数。问题是,一旦确定一个数字不是素数,就不需要一直检查。

另一个问题是,每当num % i != 0打印数字是素数时。不过,这还为时过早。除非确定所有整数的num % i != 0小于num,否则不能得出这个结论。

让我们看看如何解决这些问题。我认为最简单的方法是编写一个单独的方法来确定单个数字是否为素数。我已经将该方法称为is_prime?,并将其改名为is_each_prime?主方法。

代码语言:javascript
运行
复制
def is_each_prime?(*nums)
  nums.each { |num|
    puts "#{num} is #{ is_prime?(num) ? '' : "not " }a prime" }
end

def is_prime?(num)
  (2...Math.sqrt(num)).all? { |i| num % i != 0 }
end

puts is_each_prime?(21, 23, 17)
  #=> 21 is not a prime
  #   23 is a prime
  #   17 is a prime

创建单独的方法is_prime?的一个优点是可以单独测试它,以确保它正常工作。

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26792960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档