原题链接:http://acm.hunnu.edu.cn/online/?action=problem&type=show&id=11658&courseid=0
刚开始想到“暴力”,后来发现int只能保存到12!,而__int64也只能到保存到20多的阶乘,
后来发现,两个阶乘相除约分后为几个连续自然数相乘的形式,后来还是TLE,最后发现,只有1是Impossible
其他的都可以找到。优化一下循环可以过。
还有一种方法,从sqrt(n)开始向前面枚举。
#include#include using namespace std; int main() { int n; int kase=0; while(cin>>n) { printf("Case %d: ",++kase); if(n==1) { cout<<"Impossible"< 13) break; ans*=j; if(ans==n) { x=i; y=j; flag=false; } if(ans>n) break; } } if(flag) { cout<