一个简单模拟题,现场赛时想偏了,一看1<=k<=10^9,第一下就排除了暴力,以为时间复杂度会达到O(n^2)。其实时间复杂度为O(n^0.5)。
#include<iostream>
#include<cstdio>
using namespace std;
int main(void)
{
long long flag_i, flag_j;
long long n;
int cnt = 1;
while(~scanf("%lld", &n))
{
if(n == 1) {printf("Case %d: Impossible\n", cnt++);continue;}
long long tmp = 0;
long long i, j;
for(i = 1; i * i <= n; i++)
{
tmp = 1;
for(j = i+1; tmp < n; j++)
{
tmp *= j;
}
if(tmp == n) {flag_i = i; flag_j = j-1;break;}
}
if(tmp == n) printf("Case %d: %lld %lld\n", cnt++, flag_j, flag_i);
else printf("Case %d: %lld %lld\n", cnt++, n, n-1);
}
return 0;
}