一.描述
一个正整数 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
代码演示
#include<stdio.h>
#include<math.h>
int main()
{
int k,j,s=0,n,gs=0;//存放连续的个数
scanf("%d",&n);//输入你要求的数值
for(int i=2 ;i<=sqrt(n)+1 ;i++)//开始遍历n的因子
{
if(n%i==0)//当n余i等于0时,i便是n的一个因子
{
k = n/i; //防止n的数值变化
for(j=i+1 ;j<=sqrt(n)+1 ;j++)//从i+1遍历,判断下一个相邻的数是否为因子
{
if(k%j==0)//如果下一个因子是
{
k =k/j;
}
else
{
break; //不是的话结束循环
}
}
if(j-i>gs)
{
gs = j-i;//求连续因子的个数
s = i;//最小的因子
}
}
}
if(gs==0)
{
gs = 1;//素数情况
s = n;//等于本身
}
printf("%d\n",gs);//输出个数
printf("%d",s);//输出最小因子
for(int i=s+1 ;i<=s+gs-1 ;i++)//从最小因子下一个数开始遍历到最后一个
{
printf("*%d",i);//为了满足题目格式我们先把最小因子单独输出,后面用*%d的格式
}
//s+gs-1为最大数,举例从2开始gs=3连续个数是三个则2*3*4,最大数为4=2+3-1
return 0;
}
我这里用的是 小熊猫DEV 进行运行观察
最后上传PTA进行测试
完结撒花!!!!!
稍等,在电脑上发布还好好的手机上花括号已经乱了,我把截图放在下面