如果是素数直接输出1与素数,否则枚举长度和起始数即可。
#include<cstdio> #include<cstring> #include<cmath> #include<vector> #include<map> #include<queue> #include<stack> #include<algorithm> using namespace std; long long n; bool prime(long long x) { if(x==1) return 0; if(x==2) return 1; for(long long i=2; i*i<=x; i++) { if(x%i==0) return 0; } return 1; } int main() { scanf("%lld",&n); int f=0; if(prime(n)) { printf("1 "); printf("%lld ",n); } else { for(int len=10; len>=1; len--) { long long num=1; for(long long i=2;; i++) { if(i==2) { for(long long j=i; j<=i+(long long)len-1; j++) { num=num*j; if(num>n) break; } } else num=num/(i-1)*(i+len-1); if(num>n) break; if(n%num==0) { f=1; printf("%d ",len); for(long long j=i; j<=i+len-1; j++) { printf("%lld",j); if(j<i+len-1) printf("*"); } printf(" "); break; } } if(f==1) break; } } return 0; }