一个正整数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
题目链接:L1-006 连续因子
#include<iostream>
#include<cmath>
using namespace std ;
bool isprime(int n){
if(n==2||n==3){
return true;
}
if(n%6 != 1 && n % 6 != 5){
return false ;
}
int temp = sqrt(n) ;
for(int i = 5 ; i <= temp ; i+=6){
if(n % i == 0 || n % (i+2) == 0){
return false ;
}
}
return true ;
}
int main(){
int n ;
int ms = 0 , ml = 0 ;
cin >> n ;
if(isprime(n)){
cout << 1 << endl << n << endl ;
}else{
for(int i = 2 ; i <= n/2 ; i++){
if(n % i == 0){
int sum = i ;
int j ;
for(j = i + 1 ; j <= n/2 ; j++){
sum *= j ;
if(n % sum != 0){
break;
}
}
if(j-i > ml){
ms = i ;
ml = j-i ;
i = j+1 ;
}
}
}
cout << ml << endl ;
for(int i = ms ; i < ms+ml ; i++){
cout << i ;
if(i<ms+ml-1){
cout << "*" ;
}
}
}
return 0 ;
}