这种方法使用与数据小于1e7,
这种适用于分解1到n所有数的质因子,而且打印出来是从小到大排好序的
首先找到每个数的最小质因子,不停的除以最小素因子,只到x==1
如果是分解单个还是根号n复杂度的更好一点
#include"bits/stdc++.h"
using namespace std;
typedef unsigned long long ll;
ll n,mod=1e9+7;
ll visit[10000005],num=1,a[10000005],p[10000005];//p[x]代表x的最小素因子为p[x]
void get(ll n){
for(ll i=2;i<=n;i++){
if(visit[i]==0){
a[num++]=i;
p[i]=i;
}
for(ll j=1;j<num&&i*a[j]<=n;j++){
visit[i*a[j]]=1;
p[i*a[j]]=a[j];
if(i%a[j]==0)break;
}
}
}
void fenjie(ll x){
while(x!=1){
cout<<p[x]<<" ";
x/=p[x];
}
}
int main(){
/*220078001 827425989*/
cin>>n;
get(n);
fenjie(n);
return 0;
}