• L1-006 连续因子


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

    输入格式:
    输入在一行中给出一个正整数 N(1

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

    输入样例:
    630

    输出样例:
    3
    567

    版本一
    答案正确,但是运行会超时

    #include
    
    int main() {
        int N, divisors[100], divisor = 0;
        scanf("%d", &N);
        for (int tmp = 2; tmp <= N; tmp++) {
            if (N % tmp == 0) {
                divisors[divisor] = tmp;
                divisor++;
            }
        }
        int start, length = 0;
        for (int tmp = 0, start_n, length_n; tmp < divisor; tmp++) {
            start_n = divisors[tmp];
            length_n = 1;
            int temp, product=divisors[tmp]*divisors[tmp+1];
            for (temp = tmp+1;temp<divisor&&divisors[temp]-1==divisors[temp-1]&&N%product==0;temp++){
                length_n++;
                product*=divisors[temp+1];
            }
            if(length_n>length){
                start=start_n;
                length=length_n;
            }
            if(temp==divisor)
                break;
        }
        printf("%d\n", length);
        for (int tmp = 0; tmp < length - 1; tmp++)
            printf("%d*", start + tmp);
        if(length!=0)
            printf("%d\n", start + length - 1);
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    在这里插入图片描述
    版本二
    答案正确,同时运行不会超时

    #include
    #include 
    
    int main() {
        int N, divisors[100], divisor = 0, continuous[100], big_divisors[100];
        scanf("%d", &N);
        for (int tmp = 2; tmp <= pow(N,0.5); tmp++) {
            if (N % tmp == 0) {
                divisors[divisor] = tmp;
                big_divisors[divisor]=N/tmp;
                divisor++;
            }
        }
        for(int tmp=divisors[divisor-1]*divisors[divisor-1]==N?divisor-2:divisor-1;tmp>=0;tmp--){
            divisors[divisor]=big_divisors[tmp];
            divisor++;
        }
        divisors[divisor]=N;
        divisor++;
        int start, length = 1;
        for(int tmp=0;tmp<divisor;){
            for(int temp=tmp+1;divisors[temp-1]==divisors[temp]-1;temp++)
                length++;
            for(int temp=length;temp>0;temp--)
                continuous[tmp+length-temp]=temp;
            tmp+=length;
            length=1;
        }
        length = 0;
        for (int tmp = 0, start_n, length_n; tmp < divisor; tmp++) {
            if(continuous[tmp]<length)
                continue;
            start_n = divisors[tmp];
            length_n = 1;
            int temp, product=divisors[tmp]*divisors[tmp+1];
            for (temp = tmp+1;temp<divisor&&divisors[temp]-1==divisors[temp-1]&&N%product==0;temp++){
                length_n++;
                product*=divisors[temp+1];
            }
            if(length_n>length){
                start=start_n;
                length=length_n;
            }
            if(temp==divisor)
                break;
        }
        printf("%d\n", length);
        for (int tmp = 0; tmp < length - 1; tmp++)
            printf("%d*", start + tmp);
        if(length!=0)
            printf("%d\n", start + length - 1);
        return 0;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
  • 相关阅读:
    Python in Visual Studio Code 2023年10月发布
    MongoDB分片集群搭建
    【Web前端大作业】基于HTML+CSS+JavaScript制作西北大学新闻网站(7页)
    Python tkinter实现复刻Windows记事本UI和菜单的文本编辑器(二)
    stable diffusion实践操作-hypernetworks
    猿创征文|Spring Boot 整合分布式调度框架:xxl-job
    C++基础——结构体
    supOS工业操作系统getPropertiesHistory服务
    【在线教育】课程封面上传图片到阿里云OSS
    JDBC入门
  • 原文地址:https://blog.csdn.net/ainuliba/article/details/133042171