这道题一开始比较难想,因为感觉情况有很多无法比较存储。看了答案才知道用的是很自然的枚举,从2开始进行枚举,判断长度,选出最长的输出。前几个数字比较容易出错2,4,8,7,14这些,整体难度不算太大。
#include<cstdio> #include<math.h> #include<algorithm> typedef long long ll; using namespace std; int main() { ll n; scanf("%lld", &n); int i, j; int anslen = 0; int temp = 1; ll sqr = (ll)sqrt(n); int st, ed; for (i = 2; i <= sqr ; i++) { temp = 1; j = i; while (1) { temp *= j; if (n%temp != 0) { break; } else if (j - i + 1 > anslen) { anslen = j - i + 1; st = i; ed = j; } j++; } } if (anslen == 0) { printf("1 %lld ", n); } else { printf("%d ", anslen); for (i = 0; i < anslen; i++) { if (i != anslen - 1) { printf("%d*", st); st++; } else printf("%d ", st); } } //printf(" "); }