Prime Factorization в Ruby с использованием Trial Division - PullRequest
0 голосов
/ 08 июля 2019

Я новичок в Ruby. У меня есть некоторый опыт работы с Python, но недавно, когда я вернулся к программированию, я решил изучать Ruby. Я работаю над программой, которая должна найти основные факторы числа, поэтому я создал метод, используя пробное деление. Затем, когда я пытаюсь вызвать метод, я получаю ошибку trial_division': undefined method `*' for nil:NilClass (NoMethodError).

Я попытался использовать разрывы для циклов while вместо end и получил те же результаты. Я не знаю, что в ruby ​​приводит к тому, что этот метод не распознается.

def trial_division(n)
  a = []
  while n % 2 == 0
    a.push(2)
    n /= 2
  f = 3
  end
  while f * f < n
      if n % f == 0
        a.push(f)
        n /= f
      else
        f += 2
      end
  end
  if n != 1
    a.push(n)
  end
puts a
end

Я бы хотел, чтобы программа находила простые множители числа и отображала массив.

1 Ответ

2 голосов
/ 08 июля 2019

Насколько я вижу, есть 2 ошибки: строка f=3 находится в цикле while, в результате чего f становится равным нулю, когда n оказывается нечетным.У nil нет метода *, который вызывает ошибку.

Также while f*f<n завершается с ошибкой в ​​течение 9,;должно быть while f*f <= n.Обратите внимание, что puts возвращает nil, поэтому весь метод возвращает nil.

Также: https://ruby -doc.org / stdlib-2.6.3 / libdoc / prime / rdoc / Prime.html # method-i-prime_division . (require "prime"; p 100.prime_division)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...