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

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

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

输入样例: 630 输出样例: 3 567 / * 12!=479 001 600=23456789101112;连续因子的长度为11; 2^31=2147483648; 13!=6227 020 800=23456789101112*13;连续因子的长度为12; 故12!<2^31<13!;确保考虑周全,取最大长度len=12; 这个数据是我从一位作者那看到的

若start+len没有减一,则会多乘一位;例,当len=11时;(i=2;i<=14;i++ ;)2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * 11 * 12 * 13;长度为12,与长度len=11不相等; 故需要减一; 代码如下:

#include<stdio.h>
#include<math.h>
int main()
{
    int n,len,i,s;
    long long int a;
    scanf("%d",&n);
    for(len=12;len>=1;len--)
    {
        for(s=2;s<=sqrt(n);s++)
        {
            a=1;
            for(i=s;i<=s+len-1;i++)
            {
               a*=i;
            }
            if(n%a==0){
                printf("%d\n%d",len,s);
                for(i=s+1;i<=len+s-1;i++)
                {
                    printf("*%d",i);
                }
                return 0;//此处不能用goto,否则测试点4错误
            }
        }
        
    }
    printf("1\n%d",n);
}