#include <stdio.h>
int f(int (*d)[2], int n)
{
int p = 0, cnt;
for (int i=2; i*i <= n; ++i)
{
for (cnt = 0; n % i == 0; cnt++, n /= i) {}
if (cnt == 0)
continue;
d[p][0] = i;
d[p++][1] = cnt;
}
if (n > 1)
{
d[p][0] = n;
d[p++](l] = 1;
}
return p;
}
据我了解,当我寻找复杂性时,我正在寻找循环。第一个循环很简单。它给我们O(sqrt(n))
,但是有第二个循环使n减小,这一刻我不太了解。实验表明,复杂度为O(log(n))
。
答案 0 :(得分:0)
谈到第二个循环:n%i == 0;和n = n / i;如果我们在for循环中循环,则在第一次迭代中将有n = n / i / i ....在第k次迭代中,我们将具有n /(i ^ k),这将在n%i时停止! = 0;假设n /(i ^ k)== 1,所以1%i == 1!= 0,所以从n /(i ^ k)== 1,我们将在i base中得到k = log(n),这意味着log(n)