Книга: Программирование на языке 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
- 5.1. Представление чисел в языке Ruby
- 5.2. Основные операции над числами
- 5.3. Округление чисел с плавающей точкой
- 5.4. Сравнение чисел с плавающей точкой
- 5.5. Форматирование чисел для вывода
- 5.6. Вставка разделителей при форматировании чисел
- 5.7. Работа с очень большими числами
- 5.8. Использование класса BigDecimal
- 5.9. Работа с рациональными числами
- 5.10. Перемножение матриц
- 5.11. Комплексные числа
- 5.12. Библиотека mathn
- 5.13. Разложение на простые множители, вычисление НОД и НОК
- 5.14. Простые числа
- 5.15. Явные и неявные преобразования чисел
- 5.16. Приведение числовых значений
- 5.17. Поразрядные операции над числами
- 5.18. Преобразование системы счисления
- 5.19. Извлечение кубических корней, корней четвертой степени и т.д.
- 5.20. Определение порядка байтов
- 5.21. Численное вычисление определенного интеграла
- 5.22. Тригонометрия в градусах, радианах и градах
- 5.23. Неэлементарная тригонометрия
- 5.24. Вычисление логарифмов по произвольному основанию
- 5.25. Вычисление среднего, медианы и моды набора данных
- 5.26. Дисперсия и стандартное отклонение
- 5.27. Вычисление коэффициента корреляции
- 5.28. Генерирование случайных чисел
- 5.29. Кэширование функций с помощью метода memoize
- 5.30. Заключение
- 6. Совершенные числа
- 5. Простые числа
- 12.6. Псевдослучайные числа
- 14. Так ли случайны случайные числа?
- Простые поля
- Пример 12-37. Разложение числа на простые множители
- Простые числа. Разложение на множители
- Простые числа
- Алгоритмическая вероятность
- 5.3. Округление чисел с плавающей точкой
- Разложение по стопкам
- 5.10. Перемножение матриц