不是最优的做法,就是简单的去除然后再判断,时间上面会有点慢,但是可以有所改进下面是代码实现
#include <bits/stdc++.h>
using namespace std;
///时间复杂度有待优化,在div的那个for循环中时间复杂度为O(sqrtn)
///优化可以先用筛法求出素数的个数,再去对素数进行循环
vector<int> factorSimple(int n){
vector<int> ret;
int sqrtn=int(sqrt(n));
for(int div=2;div<=sqrtn;div++){
while(n%div==0){
n/=div;
ret.push_back(div);
}
}
///执行到这一步,若仍然大于sqrtn,那这个数必定是一个素因子
///例如n=14 14=2*7
if(n>1)
ret.push_back(n);
return ret;
}
vector<int> vec;
int main()
{
int n;
while(cin>>n){
vec.clear();
vec=factorSimple(n);
for(int i=0;i<vec.size();i++)
cout << vec[i] << ' ';
cout << endl;
}
return 0;
}
接下来可以做一些优化,可以用筛法预先求出
稍后再补充