Я сделал метод, который генерирует простые факторы. Какое бы составное число я ему ни подсовывал, оно дает простые множители. Однако, если я вставлю в него простое число, оно не вернет 1
и само число. Вместо этого он вернет 1
и некоторое простое число, меньшее, чем число, введенное в метод.
Я решил добавить оператор if
, который прервет процесс, если введенное число окажется простым. Вот код:
def get_prime_factors(number)
prime_factors = []
i = 0
primes = primes_gen(number)
if primes.include?(number)
return "Already a prime!"
end
original_number = number
while primes[i] <= original_number / 2
if number % primes[i] == 0
prime_factors << primes[i]
number = number / primes[i]
else
i = i + 1
end
if number == 1
return prime_factors
end
end
end
Я передал методу 101
, и метод вернул nil
. Этот метод вызывает метод primes_gen
, который возвращает массив, содержащий все простые числа, меньшие входного значения. Вот:
def primes_gen(limit)
primes = []
i = 0
while i <= limit
primes << i if isprime?(i)
i = i + 1
end
primes.delete(0)
primes.delete(1)
return primes
end
Я знаю, что должен быть более тонкий способ исправить ошибку. Если кто-то хочет порекомендовать мне направление для изучения, насколько это возможно, я был бы очень благодарен.
РЕДАКТИРОВАТЬ: Изменена строка 4 метода primes_gen(), чтобы включить оператор ‹= вместо оператора ‹.
primes = primes_gen(number)
наprimes = primes_gen(number+1)
в первой функции и посмотрите, работает ли она. Или попробуйте изменить условиеi < limit
наi <= limit
во второй функции. - person Anshul Goyal   schedule 19.10.2013i=2
. - person Anshul Goyal   schedule 19.10.2013