这道题本来应该用数论的方法来分解约数的..还不会整...暴力A了先..
暴力也就是枚举开N次方..在次方回来.看是否相同..还有有个值得注意的...题目所给的数据有负数...处理要小心..
Program:
#include<iostream> #include<stdio.h> #include<string.h> #include<cmath> #include<queue> #include<time.h> #include<stack> #include<set> #include<algorithm> #define ll long long #define oo 1000000007 #define pi acos(-1.0) #define MAXN 100005 using namespace std; int main() { ll n,i,x,k,p; bool f; while (~scanf("%I64d",&n) && n) { f=false; if (n<0) n=-n,f=true; for (i=32;i>=1;i--) { if (f && i%2==0) continue; x=(ll)pow(n,1.0/i); for (k=x-3;k<=x+3;k++) { p=(ll)(pow(k,i*1.0)+0.5); if (p==n) goto A; } } A: printf("%d\n",i); } return 0; }