【问题标题】:Prime factoring returns nil when fed primes当输入素数时,素数分解返回 nil
【发布时间】: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 &lt; limit 条件更改为i &lt;= limit
  • 另外,为什么要删除 primes_gen 方法中的第 0 和第 1 个元素?是因为您获得 0、1 的值吗?在这种情况下,您可以使用i=2 进行初始化。
  • 非常感谢!将 i
  • 是的,当然!刚刚做了。 :) 再次感谢。

标签: ruby primes prime-factoring


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多