Фикснум и простые числа в рубине - PullRequest
4 голосов
/ 05 апреля 2009

Прежде чем я приступил к написанию этого самостоятельно, кто-нибудь видел реализацию ruby ​​следующего поведения?

puts 7.nextprime();     #=>  11
puts 7.previousprime(); #=>  5
puts 7.isprime();       #=> true

Очевидно, что такого рода вещи были бы уродливы для больших чисел, но для целых чисел, никогда не превышающих нескольких тысяч (общий для меня случай), разумная реализация выполнима, отсюда и вопрос.

Ответы [ 2 ]

10 голосов
/ 05 апреля 2009

Ruby поставляется со встроенным классом Prime, который позволяет перебирать простые числа, начинающиеся с 1, но я не вижу способа инициализировать его начальным значением, отличным от 1, или предикатной проверки, чтобы определить, стоит ли число простое. Я бы сказал, пойти на это, хотя вы должны иметь в виду, что математика в Ruby может быть медленной, и если производительность является фактором, вам может быть лучше подумать о написании ее как расширения C или Java. Вот пример , как использовать RubyInline для генерации простых чисел в C .

Кроме того, я предлагаю вам избегать использования имени метода 7.isprime - в Ruby существует соглашение 7.prime?.

3 голосов
/ 05 апреля 2009

Взгляните на найденные фрагменты здесь . Они могут дать вам старт.

...