采用暴力枚举。由于n最大不超过2^31, 大概是 2 * 10^9
由于这个数在12! 到 13 ! 之间,而且又由于不含1,所以最高就只有11位。
然后通过枚举每一种以某因子开头连续的情况是否成立,从大到小枚举。
#include <iostream> using namespace std; int n; bool judge(int kt, int gs, int n) { while(gs--) { if(n % kt != 0) return false; n /= kt; kt++; } return true; } void print(int kt, int gs) { int flag = 0; cout << gs << endl; while(gs--) { if(flag) cout << "*"; cout << kt; kt++; flag++; } } int main() { cin >> n; for(int i = 11; i > 0; i--) { for(int j = 2; j < n / j; j++) { if(judge(j, i, n)) { print(j, i); return 0; } } } print(n, 1); return 0; }