一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数N(1<N<2^31)。
输出格式:
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
输入样例:
630
输出样例:
3
5*6*7
输入格式:
输入在一行中给出一个正整数N(1<N<2^31)。
输出格式:
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
输入样例:
630
输出样例:
3
5*6*7
就是搜索,从每个能够整除的因子开始往下连续搜索, 直到不能再整除,退回以后找下一个能够整除的因子; 唯一的点是素数输出其本身; */ #include<cstdio> #include<cmath> #include<iostream> using namespace std; int find(int n,int fac,int l) //n为剩余因子 fac为下个因子 l为连续因子的长度 { if(n%fac==0) { find(n/fac,fac+1,l+1); } else return l; } int main() { int n,length=0,ans; cin>>n; for(int i=2; i<sqrt(n); i++) { if(n%i==0) { int l=find(n/i,i+1,1); if(l>length) { length=l; ans=i; } } } if(length==0) //说明n为素数 { cout<<1<<endl; cout<<n<<endl; return 0; } cout<<length<<endl; for(int i=0; i<length-1; i++) cout<<ans+i<<"*"; cout<<ans+length-1<<endl; }