不知道这个的复杂度怎么分析。 不过worst case 应该是O(n),average 可能是O(sqrt(n))
int maxPrime(int n)
{
assert(n>=0);
if(n <= 3) return n;
int k = 1;
while(n > 1)
{
++k;
if(k > n / k) return n;
while(n % k == 0)
n /= k;
}
return k;
}
这是婷婷的代码,其中
if(k > n / k) return n;
很赞!
用这句话来控制运算上限。 因为:经过运算的n肯定也是input的因子,并且一定大于k,不然早就被除掉了。