两种方法,第一种是将所有的素数筛选出来,第二种直接循环就行了(第二种更加的高效)。
第一种方法其实就是先将素数筛选出来然后再计算,第二种是直接计算。
第一种的代码
#include<bits/stdc++.h> using namespace std; const int Max = 1e7+7; bool prim[Max]; vector <int> ve; //素数筛选 void pre_prim() { for(int i=2;i*i<=Max;i++) { if(!prim[i]) { ve.push_back(i); for(int j=i;j<Max;j+=i) prim[j] = true; } } } int main() { pre_prim(); long long n; while(~scanf("%lld",&n)) { vector<int>::iterator iter; for(iter=ve.begin();iter!=ve.end();iter++) { if(n%*iter == 0) { while(n%*iter == 0) { printf("%d ",*iter); n /= *iter; } } } if(n!=1) printf("%lld",n); printf(" "); } }
第二种方法的代码:
#include<bits/stdc++.h> using namespace std; typedef long long ll; int main() { ll n; while(~scanf("%lld",&n)) { for(int i=2;i*i<=n;i++) { if(n%i == 0) { while(n%i == 0) { printf("%d ",i); n/=i; } } } if(n!=1) printf("%lld",n); printf(" "); } return 0; }