题目链接在此。
明白一点:N不会被除自己以外的大于sqrt(N)的整数整除。
然后直接暴力即可。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int main(){
int n;
scanf("%d",&n);
int sqr = (int)sqrt(n);
int ansLen = 0, ansI = -1; //连续因子长度,连续因子序列的第一个
for(int i = 2; i <= sqr; i++){
long long temp = 1; //定义成long long 防止溢出
for(int j = i; j <= sqr; j++){
temp *= j;
if(n%temp != 0) break;
if(j-i+1 > ansLen){
ansLen = j-i+1;
ansI = i;
}
}
}
if(ansLen == 0){ //此时ansLen==0,说明只有n本身了
printf("1\n%d",n);
}else{
printf("%d\n",ansLen);
for(int i = ansI; i<ansI+ansLen; i++){
if(i > ansI) printf("*");
printf("%d",i);
}
}
return 0;
}