这种方法使用与数据小于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(){/*28001 827425989*/cin>>n;get(n);fenjie(n);return 0;}
如果觉得《求一个数的最小素因子外加快速分解质因子》对你有帮助,请点赞、收藏,并留下你的观点哦!