枚举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博客,格式可能有所偏差。 **