#include<iostream> #include<cmath> using namespace std;bool isPrime(int N){if(N==2) return true;int n=sqrt(N)+1;for(int i=2;i<=n;i++){if(N%i==0) return false;}return true; }int main(){int N;cin>>N;if(isPrime(N)){cout<<"1\n"<<N<<endl;return 0;}int i;int factors[1000];int count=0;for(i=2;i<=sqrt(N)+1;i++){if(N%i==0){factors[count]=i;count++;}}int min=1,minlen=1,index=0;int sum;for(i=0;i<count;i++){sum=factors[i];min=1;for(int k=i+1;k<count;k++){if(factors[k]-factors[k-1]==1){sum*=factors[k];if(N%sum==0){min++;if(min>minlen){minlen=min;index=i;}}else{break;}}else{break;}}}cout<<minlen<<endl;for(i=0;i<minlen;i++){if(i==minlen-1){cout<<factors[i+index]<<endl;}else{cout<<factors[i+index]<<"*";}}return 0; }
重点在于
1、确保sum能被N整除,也就是确保因子乘积也是N的因子;
2、确保N的所有因子能被完全的包括到
3、采用双指针的方式逐步尝试遍历,避免漏项
4、注意在内外循环中的溢出问题。