【题目大意】:给出一个数x,然后求出最大的p满足x=b^p,也就是求一个最小的数能经过p相乘得到x
【解题思路】:
这道题就是枚举,从后往前枚举次数p,然后~~进行精度判断就可以了。水题。
【代码】:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <cmath>
#include <string>
#include <cctype>
#include <map>
#include <iomanip>
using namespace std;
#define eps 1e-8
#define pi acos(-1.0)
#define inf 1<<30
#define pb push_back
#define lc(x) (x << 1)
#define rc(x) (x << 1 | 1)
#define lowbit(x) (x & (-x))
#define ll long long
ll n;
double ce,fl;
bool flag;
int i,t;
void solve(){
flag=false;
if (n<0) {
n=n*-1;
flag=true;
}
for (i=31; i>=1; i--){
ce=ceil(pow(n,1.0/i));
fl=floor(pow(n,1.0/i));
if (fabs(pow(ce,i)-n)<eps || fabs(pow(fl,i)-n)<eps){
if (flag){
if (i%2==1) {t=i; break;}
}
else {t=i; break;}
}
}
printf("%d\n",t);
}
int main() {
while (~scanf("%lld",&n)){
if (n==0) break;
solve();
}
return 0;
}