【发布时间】:2013-10-19 03:56:23
【问题描述】:
我做了一个生成素因子的方法。无论我推什么合数,它都会给出主要因素。但是,如果我将质数推入其中,它不会返回 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
我知道应该有更巧妙的方法来解决这个问题。如果有人想为我推荐一个探索的方向,我将非常感激。
编辑:将 primes_gen() 方法的第 4 行更改为包含
【问题讨论】:
-
尝试在第一个函数中将
primes = primes_gen(number)更改为primes = primes_gen(number+1),看看它是否有效。或者尝试在第二个函数中将i < limit条件更改为i <= limit。 -
另外,为什么要删除 primes_gen 方法中的第 0 和第 1 个元素?是因为您获得 0、1 的值吗?在这种情况下,您可以使用
i=2进行初始化。 -
非常感谢!将 i
-
是的,当然!刚刚做了。 :) 再次感谢。
标签: ruby primes prime-factoring