L1-006 连续因子
一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数,并输出最小的连续因子序列。
输入格式:
输入在一行中给出一个正整数 N(1<N<231)。
输出格式:
首先在第 1 行输出最长连续因子的个数;然后在第 2 行中按 因子1*因子2*……*因子k
的格式输出最小的连续因子序列,其中因子按递增顺序输出,1 不算在内。
#include<stdio.h>
struct yinshu
{
int start;//开始的个数
int count;//连续因数的个数
};
int main(void)
{
int n;
int time = 0;
scanf("%d",&n);
struct yinshu arr[100] = {0};
int mxlen = 0;
for (int i = 2; i <n; i++)
{
if (n % i != 0)
continue;
if (n % i == 0)
{
int count = 1;
int daiti = n;
daiti = n / i;
arr[time].start = i;
arr[time].count = count;
for (int x = i + 1; daiti % x == 0; x++)
{
count++;
arr[time].count = count;
daiti= daiti/ x;
}
time++;
}
}
int tmp = 0;//tmp表示数组开始的地方
int index = 0;
while (tmp <= time)
{
if (arr[tmp].count > mxlen)
{
mxlen = arr[tmp].count;
index = tmp;//为个数最多时候的数组对于的下标
}
tmp++;
}//mxlen找出最大连续的因数个数
int start_num = arr[index].start;
if (mxlen == 1)//mxlen为0的时候是素数,mxlen为1的时候是单纯没有连续的因数
{
printf("1\n");
printf("%d", arr[0].start);
}
else if (mxlen == 0)
printf("1\n%d",n);
else
{
printf("%d\n",mxlen);
while (mxlen>1)
{
printf("%d*", start_num);
mxlen--;
start_num++;
}
printf("%d", start_num);
}
return 0;
}
虽然但是只有19分,会出现运行超时的情况,就不大理解。如有大佬请指教。