L1-006 连续因子

题解

  该题可以直接暴力枚举,首先讲一下思路八。

       给定一个数 n ,从 2 开始从小到大进行枚举,当发现一个数能够被整除时,可依据该数再进行连续枚举,注意 n 需要备份,且备份的数也需不断连除,每次记录只需起点和最大长度即可。刚开始我还在用数组存下来,当时我在想啥呢/(ㄒoㄒ)/~~。

#include <iostream>
#include <cmath>
using namespace std;

int n, m, temp;
int maxcount = 0, start = 0;

int main()
{
    cin >> n;
    m = sqrt(n);
    //只需存储start和maxcount 
    for (int i = 2; i <= m; ++i) {
        temp = n;
        int t = 0;
        int j = i;
        while (temp % j == 0) {
            temp /= j;
            ++j;
            ++t;
        }
        if (t > maxcount) {
            maxcount = t;
            start = i;
        }
    }
    if (maxcount) {
        cout << maxcount << endl;
        while (maxcount--) {
            if (maxcount == 0) cout << start;
            else cout << start << "*";
            ++start;
        }
    }
    else {
        cout << 1 << endl << n;
    }
    cout << endl;
    return 0;
}

 

posted @ 2020-10-28 10:19  Fool_one  阅读(300)  评论(0编辑  收藏  举报