注意点
1.从长序列到短序列遍历,同一长度从小到大,比如N=25,那就2*3*4,2*3,3*4,4*5,2,3,4,5.。。这样
2.如果是素数的话要很久才能弄出来,所以素数要特殊判断得出结论
#include<iostream>
#include<cmath>
using namespace std;
bool IsPrime(long long N){
if(N%2==0)
return false;
for(long i=3;i<=sqrt(N);i+=2)
if(N%i==0)
return false;
return true;
}
int main(){
long long i,begin=2,end=3,M=begin*end;
long long N,t=1,M1;
cin>>N;
if(IsPrime(N)){
cout<<1<<endl<<N;
return 0;
}
while(M<=N){
if(M*(end+1)<=0)
break;
M*=++end;
}
M1=M;
while(N%M1!=0){
if(M1>N||M1<=0){
M1=M/=end--;
t=1;
if(begin>end)
break;
}
else{
M1/=begin+t-1;
M1*= end+t;
t++;
}
}
cout<<end-begin+1<<endl;
for(i=begin;i<=end;i++){
if(i!=begin)
cout<<"*";
cout<<i+t-1;
}
}