UVa 10622 - Perfect P-th Powers(对数+快速幂)

枚举50000以内的数,对数,利用快速幂求值验证。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include<cstdio>
#include<cmath>
using namespace std;
int fexp(int a,int b){
int cur=1,t=a;
while(b){
if(b&1) cur*=t;
t*=t;
b>>=1;
}
return cur;
}
int find(int n){
for(int i=2;i<50000;++i){
int k=(log10(fabs(n))/log10(i)+0.01);
if(fexp(i,k)==n) return k;
if(fexp(-i,k)==n) return k;
}
return 1;
}
int main(){
int n;
while(~scanf("%d",&n)&&n)
printf("%d\n",find(n));
return 0;
}

** 本文迁移自我的CSDN博客,格式可能有所偏差。 **