Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 红宝石素数程序_Ruby_Math - Fatal编程技术网

Ruby 红宝石素数程序

Ruby 红宝石素数程序,ruby,math,Ruby,Math,我知道以前也有人问过类似的问题,但这些问题似乎都太复杂了,我觉得我离这并不遥远,所以我想知道是否有人知道如何调整我的代码以使其正常工作。我的目标是将一个范围内的所有素数保存到一个数组中,然后打印该数组。下面是到目前为止我的代码 prime_array = [] (1...100).each do |num| if Math.sqrt(num) % 2 == 0 prime_array.push(num) end end prime_array #=> [4, 16, 3

我知道以前也有人问过类似的问题,但这些问题似乎都太复杂了,我觉得我离这并不遥远,所以我想知道是否有人知道如何调整我的代码以使其正常工作。我的目标是将一个范围内的所有素数保存到一个数组中,然后打印该数组。下面是到目前为止我的代码

prime_array = []

(1...100).each do |num|
  if Math.sqrt(num) % 2 == 0
    prime_array.push(num)
  end
end

prime_array
#=> [4, 16, 36, 64]

我尝试了一些不同的选择,但遇到了困难,看不出我需要做什么。我试着让它尽可能简单,因为我觉得很多答案都有点过于复杂。提前感谢。

让我们计算7(质数)和8(复合数)的平方根:

这真的没用,是吗?显然,你不能通过计算一个数的平方根来判断它是否是质数

相反,您必须检查数字的除数。发件人:

素数(或素数)是一个大于1的数,除1和自身外没有其他正数

让我们确定7的除数:(使用模运算符)

最后,这里是Ruby代码的一个变体,它检查给定的数字
num
是否正好有两个除数,
1
num
本身:

prime_array = []

(1...100).each do |num|
  if (1..num).select { |d| num % d == 0 } == [1, num]
    prime_array.push(num)
  end
end

prime_array
#=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

以上代码可以优化。我把这个留给你。

方法,在ruby中返回数组中的素数

 def is_prime?(number)
       return false if number <2
        (2..Integer.sqrt(number)).each do |divisor|
              return false if number % divisor == 0
  end
     return number
end

def read_array(array)
     primes = []
  array.each do |num|
       primes << num if is_prime?(num)
  end
 return primes
end
def是素数?(数字)

返回false如果数字出现,你可以自己做。你可以使用
类#Prime
库吗?哈哈@meier我已经试过了,我保证!我就是搞不懂如何分离素数@philip_yoo不,我希望找到一个没有它的解决方案,只是检查一个数字不是质数。非常感谢。这么好的回答。非常感谢!
8 % 1 #=> 0 <- 8 is divisible by 1
8 % 2 #=> 0 <- 8 is divisible by 2
8 % 3 #=> 2
8 % 4 #=> 0 <- 8 is divisible by 4
8 % 5 #=> 3
8 % 6 #=> 2
8 % 7 #=> 1
8 % 8 #=> 0 <- 8 is divisible by 8
(1..7).select { |d| 7 % d == 0 } #=> [1, 7]
(1..8).select { |d| 8 % d == 0 } #=> [1, 2, 4, 8]
prime_array = []

(1...100).each do |num|
  if (1..num).select { |d| num % d == 0 } == [1, num]
    prime_array.push(num)
  end
end

prime_array
#=> [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
 def is_prime?(number)
       return false if number <2
        (2..Integer.sqrt(number)).each do |divisor|
              return false if number % divisor == 0
  end
     return number
end

def read_array(array)
     primes = []
  array.each do |num|
       primes << num if is_prime?(num)
  end
 return primes
end