Ну, для начала вам действительно нужно протестировать Math.sqrt (n) .to_i + 1, который должен помочь для больших n значений.
Это потому, что если существует фактор, где n = a * b, то либо
Если a == b == sqrt (n) # В основном, определение sqrt
или
Если a! = b;a sqrt (n)
Если a и b меньше, чем sqrt (n), то a * b n
Во-вторых, и это более сложно, вам нужно только проверить простые числа до этого предела.Я мог бы представить схему, где простые числа кэшируются.
Надеюсь, это поможет.