一个正整数 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

answer

#include <stdio.h>
#include <math.h>
int main(){
	int start = 0;
	int len = 0;
	int N;
	scanf("%d",&N);
	for(int i = 2;i < sqrt(N);i++){//计算到该数的开平方即可 
		int j = i;
		int l = 0;
		int n = N;
		while(n % j == 0){//穷举可除尽且连续的 
			n = n / j;
			j++;
			l++;
		}
		if(len < l){//更新最大长度 
			start = i;
			len = l;
		}		
	}
	if(start == 0){//该数是素数
		start = N;
		len = 1;
	}
	printf("%d\n",len);
	int cnt = 1;
	printf("%d",start);
	for(int i = start+1;cnt < len;i++,cnt++)
		printf("*%d",i);	 
	return 0;
}