Книга: Программирование на языке Ruby

5.14. Простые числа

5.14. Простые числа

В библиотеке mathn есть класс для порождения простых чисел. Итератор each возвращает последовательные простые числа в бесконечном цикле. Метод succ порождает следующее простое число. Вот, например, два способа получить первые 100 простых чисел:

require 'mathn'
list = []
gen = Prime.new
gen.each do |prime|
 list << prime
 break if list.size == 100
end
# или:
list = []
gen = Prime.new
100.times { list << gen.succ }

В следующем фрагменте проверяется, является ли данное число простым. Отметим, что если число велико, а машина медленная, то на выполнение может уйти заметное время:

require 'mathn'
class Integer
 def prime?
  max = Math.sqrt(self).ceil
  max -= 1 if max % 2 == 0
  pgen = Prime.new
  pgen.each do |factor|
   return false if self % factor == 0
   return true if factor > max
  end
 end
end
31.prime?         # true
237.prime?        # false
1500450271.prime? # true

Оглавление книги

Оглавление статьи/книги

Генерация: 1.115. Запросов К БД/Cache: 2 / 0
поделиться
Вверх Вниз