题目链接:http://poj.org/problem?id=1730
Perfect Pth Powers
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 13099 | Accepted: 2990 |
Description
We say that x is a perfect square if, for some integer b, x = b
2. Similarly, x is a perfect cube if, for some integer b, x = b
3. More generally, x is a perfect pth power if, for some integer b, x = b
p. Given an integer x you are to determine the largest p such that x is a perfect p
th power.
Input
Each test case is given by a line of input containing x. The value of x will have magnitude at least 2 and be within the range of a (32-bit) int in C, C++, and Java. A line containing 0 follows the last test case.
Output
For each test case, output a line giving the largest integer p such that x is a perfect p
th power.
Sample Input
17 1073741824 25 0
Sample Output
1 30 2题意:输入一个数x,若为0则结束。否则,我们知道这个数x必定存在相应的a,b,使得x等于a的b次方;这样的a,b有至少一对。你所要做的就是求出最大的b。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
long long n; //int不能满足要求了...
while(scanf("%lld",&n)!=EOF)
{
if(n==0) break;
long long m;
int i;
int ans=1;
if(n<0) //n可能为为负数
{ m=-n;i=3;} //负数当然得要是某个负数的奇次幂咯
else
{ m=n;i=2;}
double eps=1e-12; //精度很重要的,不能太小
double p;
for(;i<=32;)
{
p=pow(m*1.0,1.0/i); //pow(int,int)提交报错....改为float
if(fabs(int(p+eps)-p)<eps) //x等于a的b次方,b是整数,a也要是整数哦.
ans=i;
if(n<0)
i+=2; //负数当然得要是某个负数的奇次幂咯
else
i++;
}
printf("%d\n",ans);
}
return 0;
}