PKU 1730 Perfect Pth Powers

分析:

      简单的枚举。从log2(x)到1计算一次是否存x=b^p。但题目有点问题,说了从2到2^32次方却存在负数。

 

 

#include <iostream>
#include 
<cmath>
using namespace std;

int main()
{
    __int64 x;
    
int i;
    
while(cin>>x,x)
    
{
        
if(x>0)
        
{
            i 
= (int)(log((double)x)/log(2.0000000)+1);
            
for(;i>1;--i)
            
{
                
double m = pow(x,1.0000000/i);
                __int64 mm 
= (__int64) m;
                
if(m-(double)mm<1e-12||(double)mm+1-m<1e-12)
                
{
                    cout
<<i<<endl;
                    
break;
                }

            }

            
if(i==1)
                cout
<<1<<endl;
        }

        
else
        
{
            x 
= -x;
            i 
= (int)(log((double)x)/log(2.0000000)+1);
            
if(i%2 == 0)
                
--i;
            
for(;i>1;i-=2)
            
{
                
double m = pow(x,1.0000000/i);
                __int64 mm 
= (__int64) m;
                
if(m-(double)mm<1e-12||(double)mm+1-m<1e-12)
                
{
                    cout
<<i<<endl;
                    
break;
                }

            }

            
if(i==1)
                cout
<<1<<endl;
        }

    }

    
return 0;
}
posted @ 2009-04-29 11:28  黄浩贤  阅读(329)  评论(0编辑  收藏  举报