求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。然后超过根号n的素因子最多只有一个,因为两个就超过n了。所以i*i<=tn即可,最后在看一下这个tn是不是1,不是的话,那它也是个素因子。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f;
vector<int> p;
void resolve(ll n){
ll tn=n;
for(int i=2;i*i<=tn;++i){
while(tn%i==0){
p.push_back(i);
tn/=i;
}
}
if(tn!=1) p.push_back(tn);
}
int main(){
std::ios::sync_with_stdio(0);
ll n;
while(cin>>n){
p.clear();
resolve(n);
cout<<"素因子个数 "<<p.size()<<endl;
for(int i=0;i<p.size();++i){
cout<<p[i]<<" ";
}
cout<<endl;
}
return 0;
}