1.利用试除法分解质因数时最原始的写法是下面的divide1()函数,直接从2~n遍历循环,但是时间复杂度是O(N),很容易看出若n是一个很大的数会导致超时,因此要改进divide1()函数。
void divide1(int n)
{
for(int i=2;i<=n;i++)
if(n%i==0)
{
int s=0;
while(n%i==0)
{
n/=i;
s++;
}
cout << i << " " << s << endl;
}
}
2.根据质数的性质,n中最多只包含一个大于的质因子,因为如果有两个大于
的质因子那么两者乘积是大于n的,因此可以改进为下面这种写法,此时时间复杂度为O(
):