一、问题描述
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
二、流程设计
(1)使用循环
(2)循环要怎么用(求解因子;求解连续因子;我们还要求解连续因子的个数,因为要输出最多连续因子个数的连续因子;我还要求这个连续因子的起点,比如630的最长连续因子是5*6*7,起点是5,然后在递增输出就好了,所以起点我也要知道)
(3)确定用双循环(因为我一边要确定连续因子,我还要确定连续因子个数,求解连续因子我就要一个循环了,那么再加上一个个数我也得套在循环里,更何况还有一个起点呢)
(4)输出格式的限制:我需要先输出最长因子的个数,在输出最长连续因子相乘,乘号有讲究。
四、代码实现
#include <bits/stdc++.h>
using namespace std;
int main() {
long long n;
cin >> n;
int i=0,j=0,a=0,sum=0,num=0,temp=0,qidian =0,longqidian=0;
int x =sqrt(n);
for(i=2;i<=x;i++){
num=0;
sum=n;
qidian=i;
for(int j=i;sum%j==0&&sum!=0;j++){
sum/=j;
num++;
}
if(num>temp){
temp=num;
longqidian=qidian;
}
}
if(temp==0)
printf("1\n%d",n);
else
{
printf("%d\n",temp);
i=longqidian;
while(i<longqidian+temp){
if(i!=longqidian)
printf("*");
printf("%d",i);
i++;
}
}
}