题解
该题可以直接暴力枚举,首先讲一下思路八。
给定一个数 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; }
原文:https://www.cnblogs.com/xuwenchao/p/13889505.html