质数是只能由其自身和一(1)除的数。 Ruby使使用Prime类访问任意范围内的质数变得很方便。 此类表示一组所有质数。 Ruby还提供了几种访问此处值的方法。 要使用素类,请按以下步骤在文档中“要求”它:
require ‘prime’
要返回一定范围内所有素数的数组,可以将Prime类与可枚举方法一起使用。 只需按以下步骤进行传递:
prime = Prime.take_while { |p| p < 30 }
print prime
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
这也可以通过使用主要的Eratosthenes发生器来完成。 这将在需要时使用Eratosthenes方法生成所需的质数:
num = 50
prime_nums = Prime::EratosthenesGenerator.new.take_while
{ |prime| prime <= num }
print prime_nums
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
“ Prime.prime?” 方法可用于确定传入的任何数字是否为质数。
Prime.prime?( 60 )
# returns false
Prime.prime?( 5 )
# returns true
这些简单而强大的方法可以与其他可枚举的Ruby方法一起使用,以解决其他问题。 确定存在于指定数字范围内的质数的数量就是这种可能性之一。
require "prime"
def number_of_primes (array)
prime_arr = Prime.take_while { |p| p < 500 }
num = array.count do |x|
prime_arr. include ?(x)
end
num
end
puts number_of_primes([ 121 , 17 , 21 , 29 , 11 , 341 , 407 , 19 , 119 , 352 ])
# 4
最后,Prime模块可用于确定数量,该数量是给定列表中最多数量的因素。 为此,可以采取以下步骤:
1)检索一组最高数之前的质数数组:
prime_arr = Prime.take_while { |x| x < 10_000 }
2)确定列表中每个数字的因数,并将这些值存储在持有人中。
for i in 0 ...array.length
nums << ( 1 ...array[i]).select { |x| array[i] % x == 0 }
end
3)使用先前保存的素数数组,使用for循环确定哪些因数是素数。
for i in 0 ...nums.length
for j in 0 ...nums.length
if prime_arr. include ?(nums[i][j])
result << nums[i][j]
end
end
end
4)计算并返回最常出现的最大值。
mode = result.uniq.max_by{ |i| result.count(i) }
mode
将所有这些放在一起可以使我们:
require 'prime'
def prime_prime (array)
nums = []
result = []
prime_arr = Prime.take_while { |x| x < 10_000 }
for i in 0 ...array.length
nums << ( 1 ...array[i]).select { |x| array[i] % x == 0 }
end
for i in 0 ...nums.length
for j in 0 ...nums.length
if prime_arr. include ?(nums[i][j])
result << nums[i][j]
end
end
end
mode = result.uniq.max_by{ |i| result.count(i) }
mode
end
puts prime_prime([ 2 , 3 , 5 , 6 , 9 ])
# => 3
puts prime_prime([ 121 , 17 , 21 , 29 , 11 , 341 , 407 , 19 , 119 , 352 ])
# => 11
因此,您可以看到,所示的Prime模块可以多种巧妙的方式使用!
From: https://hackernoon.com/get-to-know-prime-the-ruby-class-for-sustaining-prime-numbers-ef6h365u