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

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.