我找到最高素因子的功能有什么问题?

时间:2011-08-18 23:51:32

标签: php math primes

function find_highest_prime_factor($n)
{
    for ($i = 2; $i <= $n; $i++) 
    {   
        if (bcmod($n, $i) == 0) //its a factor
        {
            return max($i, find_highest_prime_factor(bcdiv($n,$i)));
        }
    }
    if ($i == $n)
    {
        return $n; //it's prime if it made it through that loop
    }
}

更新:这是正确的答案,我的不好!

3 个答案:

答案 0 :(得分:2)

除去最后的if语句,否则$i!=sqrt($n)因为sqrt($ n)不是整数,你有一个未定义的返回值

function find_highest_prime_factor($n){
  for ($i = 2; $i <= sqrt($n); $i++) //sqrt(n) is the upperbound
  {
       if (bcmod($n, $i) == 0) //its a factor
       {
          return max($i, find_highest_prime_factor(bcdiv($n,$i)));
       }
   }
   return $n; //it's prime if it made it through that loop
 }

答案 1 :(得分:1)

第11行应该是:

if ($i == ceil(sqrt($n)))

答案 2 :(得分:0)

从2开始并逐步减少1是低效的。至少分别检查2,然后每次从3步进2循环。使用2-4轮会更快。

当您递归时,您的代码会在试用因子2处再次启动。最好传递一个包含您到目前为止所达到的因子的第二个参数。然后,递归将不会回溯已经过测试的旧因素。