分解质因数是指将一个合数分解成几个质数相乘的形式
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin>>n;
for(int i=2;i<=sqrt(n);i++){
while(n%i==0){
cout<<i<<'\n';
n/=i;
}
}
if(n>1){
cout<<n<<'\n';
}
return 0;
}
PS:以上代码对于质数会输出它本身,对于1不会有输出,想要记录质因数及其指数可以用map[(i或n) ]++替换输出记录结果
时间复杂度O(sqrt(n))
步骤解释:
注意到这里并没有判断i是否是质数仍然能够得到正确结果
原因是i=2本就是质数,while循环将出现过的所有的i的倍数先剔除,之后符合n%i==0条件的i必然是质数
最后留下的n要么是1,要么是质数,需要特判