2023/5/16

L1-006 连续因子
分数 20
作者 陈越
单位 浙江大学

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

输入格式:

输入在一行中给出一个正整数 N(1<N<231)。

输出格式:

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

输入样例:

630

 

输出样例:

3
5*6*7
 
#include<stdio.h>
#include<math.h>
int main()
{
    int n = 0;
    scanf("%d", &n);
    int i = 0,j=0, a = 0, sum=0,num = 0,temp=0,qidian=0,longqidian=0;
    int x = sqrt(n);//这里解释一下,为什么sqrt(n),因为我们最少的因子就两个为素数,假设这个不是素数,极限求最大的两个值相乘等于该数就是开根号,所以这里是节省运行时间,防止超时
    for (i = 2;i <= x;i++)
    {
        num = 0;
        sum = n;
        qidian = i;
        for (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++;
        }
    }
    return 0;
}

 

posted on 2023-05-16 21:02  清荣峻茂  阅读(62)  评论(0)    收藏  举报