• 【PAT甲级 - C++题解】1096 Consecutive Factors


    ✍个人博客:https://blog.csdn.net/Newin2020?spm=1011.2415.3001.5343
    📚专栏地址:PAT题解集合
    📝原题地址:题目详情 - 1096 Consecutive Factors (pintia.cn)
    🔑中文翻译:连续因子
    📣专栏定位:为想考甲级PAT的小伙伴整理常考算法题解,祝大家都能取得满分!
    ❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

    1096 Consecutive Factors

    Among all the factors of a positive integer N, there may exist several consecutive numbers. For example, 630 can be factored as 3×5×6×7, where 5, 6, and 7 are the three consecutive numbers. Now given any positive N, you are supposed to find the maximum number of consecutive factors, and list the smallest sequence of the consecutive factors.

    Input Specification:

    Each input file contains one test case, which gives the integer N (131).

    Output Specification:

    For each test case, print in the first line the maximum number of consecutive factors. Then in the second line, print the smallest sequence of the consecutive factors in the format factor[1]*factor[2]*...*factor[k], where the factors are listed in increasing order, and 1 is NOT included.

    Sample Input:

    630
    
    • 1

    Sample Output:

    3
    5*6*7
    
    • 1
    • 2
    题意

    在一个正整数 N 的所有因子中,可能存在几个连续的数字。

    例如,630 可以分解为 3 × 5 × 6 × 7 3×5×6×7 3×5×6×7 ,其中 5、6、7 是三个连续的数字。

    现在给定任意正整数 N ,请你找到最大连续因子数,并列出连续因子的最小序列。

    思路

    我们可以枚举每一个起点,然后再去从该起点出发找出连续因子。

    注意,题目需要输出最长的连续因子,且最长长度下连续因子的起点需要最小。

    代码
    #include
    using namespace std;
    
    int main()
    {
        int n;
        cin >> n;
    
        vector<int> res;
        for (int i = 2; i <= n / i; i++)
            if (n % i == 0)    //判断是否为约数
            {
                vector<int> seq;
                //找出连续因子
                for (int m = n, j = i; m % j == 0; j++)
                {
                    seq.push_back(j);
                    m /= j;
                }
                //更新最长的连续因子
                if (seq.size() > res.size())   res = seq;
            }
    
        //如果是质数,则直接输出
        if (res.empty()) res.push_back(n);
    
        //输出结果
        cout << res.size() << endl;
        cout << res[0];
        for (int i = 1; i < res.size(); i++)   cout << "*" << res[i];
        cout << endl;
    
        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
  • 相关阅读:
    四川汇聚荣科技有限公司靠谱吗?
    一键自动化博客发布工具,chrome和firfox详细配置
    程序人生:从小公司到一线大厂,薪资翻倍,我做到了...
    msfvenom常用参数
    MySQL用户管理
    iperf 测试网络性能
    Leetcode 754. 到达终点数字
    功能点估算方法,如何让估算偏差更小?
    解锁Spring Boot数据映射新利器:深度探索MapperStruct
    Pandas数据类型转换
  • 原文地址:https://blog.csdn.net/Newin2020/article/details/127656420