poj 1730 Perfect Pth Powers 精度修正

来源:互联网 发布:mysql 时间戳默认值 编辑:程序博客网 时间:2024/06/05 17:48

题意:

给数x,求最大的整数p,使对某个整数b有x==b^p。

分析:

从大往小枚举p看是否找得到相应的b,当确定p后b==pow(x,1/p),算pow(x,1/p)肯定是会有误差的,解决的办法是将b,b+1,b-1分别带入验算,只要有一个满足我们就找到了相应的b。

代码:

//poj 1730//sep9#include <iostream>#include <cmath>using namespace std;__int64 x;bool flag;int check(__int64 b,__int64 p){if(b<=1)return 0;__int64 sum=1;if(flag==false){while(p--)sum*=(-b);return sum==-x;}else{while(p--)sum*=b;return sum==x;}}int pass(__int64 p){double b=pow(x*1.0,1.0/p);__int64 b1=(__int64)(b+1e-9);__int64 b2=b1-1;__int64 b3=b1+1;int ok=0;if(check(b1,p))ok=1;if(check(b2,p))ok=1;if(check(b3,p))ok=1;return ok;}int main(){while(scanf("%I64d",&x)==1&&x){__int64 p;flag=true;if(x<0){flag=false;x=-x;}for(p=32;p>=1;--p)if(pass(p))break;printf("%I64d\n",p);}return 0;} 


0 0
原创粉丝点击