Познакомьтесь с Prime: класс Ruby для поддержки простых чисел

  • 27 февраля, 16:44
  • 3655
  • 0

Простое число - это число, которое может быть разделено только на себя и один (1). Ruby делает удобным доступ к простым числам в любом диапазоне с помощью класса Prime. Этот класс представляет собой набор всех простых чисел. Чтобы использовать простой класс, вызовите его в своем документе следующим образом:

require ‘prime’

Чтобы вернуть массив всех простых чисел в определенном диапазоне, класс Prime может использоваться с перечисляемыми методами. Просто передайте блок следующим образом:

prime = Prime.take_while { |p| p < 30 }

print prime 
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

Познакомьтесь с Prime: класс Ruby для поддержки простых чисел

Это также можно сделать с помощью простого генератора 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 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  можно использовать несколькими изящными способами!

Источник перевода 


0 комментариев
Сортировка:
Добавить комментарий