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

  • 27 февраля, 14:44
  • 5327
  • 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 комментариев
Сортировка:
Добавить комментарий

IT Новости

Смотреть все