zoukankan      html  css  js  c++  java
  • 天梯赛题解 L1-006 连续因子

    天梯赛题解 L1-006 连续因子
    L1-006 连续因子 (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
    5*6*7
    作者: 陈越
    单位: 浙江大学
    时间限制: 400 ms
    内存限制: 64 MB
    

      

    这道题卡了有点久....一开始是想用质数去分解出质因数,然后用质因数做。

    做了半天,发现太复杂了。

    直接暴力枚举就可以了。

    #include <iostream>
    #include <cmath>
    using namespace std;
    long long N;
    long long const INF = 0x3f3f3f3f;
    int main(){
        cin >> N;
        int cnt = 0;
        int len = 0,s;
        long long sum = 1;
        for(int i=2;i<=sqrt(N);++i){
            for(int j=i;j<=N;++j){
                sum*=j;
                if(N%sum == 0){
                    ++cnt;
                }else{
                    if(len < cnt){
                        len = cnt;
                        s = j-1;
                    }
                    sum = 1;
                    cnt = 0;
                    break;
                }
            }
        }
        if(len){
            cout << len << endl;
            for(int i=0,j=s-len+1;i<len;++i,++j){
                cout << j << (i==len-1?"":"*");
            }        
        }else{
            cout << 1 << endl;
            cout << N << endl;    
        }
        return 0;
    }
  • 相关阅读:
    [团队项目]典型用户
    0415 操作系统_实验二、作业调度模拟程序
    0415 结对2.0评价
    复利计算- 结对2.0--复利计算WEB升级版
    0408汉堡
    复利计算- 结对1.0
    0405《构建之法》第四章读后感
    复利计算器4.0 【java版】
    复利计算器的单元测试结果
    操作系统 实验一、命令解释程序的编写实验
  • 原文地址:https://www.cnblogs.com/--zz/p/10602004.html
Copyright © 2011-2022 走看看