一个正整数N的因子中可能存在若干连续的数字。例如630可以分解为3*5*6*7,其中5、6、7就是3个连续的数字。给定任一正整数N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数N(1<N<231)。
输出格式:
首先在第1行输出最长连续因子的个数;然后在第2行中按“因子1*因子2*……*因子k”的格式输出最小的连续因子序列,其中因子按递增顺序输出,1不算在内。
输入样例:630
输出样例:
3
5*6*7
#include<cstdio>
#include<cmath>using namespace std;/** 1.素数 如2 3 5 7 11 输出个数为1 因数为他本身* 2.没有连续因子 则输出最小因子 (除1以外) 如:4 输出 1\n 2\n * */
int max = 0;int main(){int n;scanf("%d",&n);int left=0; int temp,j;//将连续因子的第一个数假设 遍历找出最多的 for(int i=2 ;i<=sqrt(n)+1 ;i++){if(n%i==0){temp = n/i; //用中间变量保存n的值 防止n丢失 for(j=i+1 ;j<=sqrt(n)+1 ;j++){if(temp%j==0){temp /= j;}else{break; //如果邻接的数字不是其因子则跳出 } }if(j-i>max){ //连续的个数 max = j-i;left = i;//记录连续因子中最小的因子 } }} if(max==0){ //素数的情况 max = 1;left = n;}printf("%d\n",max);printf("%d",left);for(int i=left+1 ;i<=left+max-1 ;i++){printf("*%d",i);}return 0;
}