认识素数:维持素数的Ruby类

质数是只能由其自身和一(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值