0

我做了一个生成素因子的方法。无论我推什么合数,它都会给出主要因素。但是,如果我将质数推入其中,它将不会返回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 行更改为包含 <= 运算符而不是 < 运算符。

4

1 回答 1

1

尝试更改primes = primes_gen(number)primes = primes_gen(number+1)第一个功能,看看它是否有效。或者尝试在第二个函数中将i < limit条件更改为。i <= limit

另外,你为什么要删除 0th 和 1st 元素primes_gen method?是因为你得到的价值0, 1吗?在这种情况下,您可以使用 进行初始化i=2

于 2013-10-19T05:04:22.360 回答