1. 求一个数的质因数
#include <iostream> #include <algorithm> using namespace std; const int N =200; int tot,fac[N]; void getFac(int x){ tot=0; for(int i=2;i*i<=x;i++){ if(x%i==0){ fac[++tot]=i; while(x%i==0) x/=i; } } if(x>1) fac[++tot]=x; } signed main(){ getFac(100); for(int i=1;i<=tot;i++) cout<<fac[i]<<' '; }
2.求某个数的所有因数
const int N =1e5; int fac[N],tot; void sov(int x){ int i; for(i=2;i*i<=x;i++){ if(x%i==0){ fac[++tot]=i; if(i*i!=x) fac[++tot]=x/i; } } sort(fac+1,fac+1+tot); for(i=1;i<=tot;i++) cout<<fac[i]<<' '; }
3.求1~n 中数字 i 质因数
const int N =1E5; vector<int> fc[N]; int vis[N]; void getFac(int top){ for(int i=0;i<=top;i++) vis[i]=0,fc[i].clear(); for(int i=2;i<=top;i++){ if(vis[i]) continue; fc[i].push_back(i); for(int j=i*2;j<=top;j+=i) vis[j]=1,fc[j].push_back(i); } }