一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。

输入格式: 输入在一行中给出一个正整数 N(1<N<2 31 )。

输出格式: 首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1因子2……*因子k 的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。

首先看到这个题目我想的是要最小连续因子序列,我想要设立一个标志,标志我要输出的数字从几开始,这时我要知道到几结束,于是我有设立的一个计数的变量来判断,于是编出的下列代码。

这里面我觉得难点就是判断flag的位置,于是我用来一个if-else语句来实现,当每次判断j是否为n的因子,如果是则count加1,否则count变为0,重头来过。

count1为是否更换flag的限制,保证不是count只要不为0就更换flag。

最后利用flag和count1就可以确定要输出数字的位置

#include<stdio.h>

#include<math.h>

int main()

{

int n;

scanf("%d",&n);

int i,flag=2,count=0,count1=0;//flag为开始输出数字的标志,count为计数的
int z,j;//z代替n,让n可以一直不变
int temp;
for(i=2;i<sqrt(n);i++)
{
    z=n;
    j=i;
    while(z%j==0)
    {
        count++;
        temp=z/j;
        j++;
        z=temp;
        if(count>count1)
        {
        count1=count;
            flag=i;
        }
    }
    count=0;
}

if(count1>0)
{
	printf("%d\n",count1);
	for(i=0;i<count1;i++)
	{	
    	if(i==0)
    	printf("%d",flag+i);
    	else
        	printf("*%d",flag+i);
	}
	printf("\n");
}
else
{
	printf("%d\n",1);
	printf("%d",n);
}
return 0;

}