J - Perfect Pth Powers
Crawling in process...
Crawling failed
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u
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
这题是要求我们求最大的平方数,按照正规的方法可能会比较难些,那我们就反着做,先求出他能开多少次方,然后在平方,求出最大的平方数。
#include <iostream> #include <algorithm> #include <cmath> #include<cstdio> #define EPS 1e-5 using namespace std; int pow(int a,int b) { int ans=1; while(b--) ans*=a; return ans; } int main() { int n; while(~scanf("%d", &n) && n) { int t=1; int i,ans=1; if(n<0) t=-1; for(i=2; i<32; i++) { int tmp=(long long)(pow(n*1.0*t,1.0/i)+EPS)*t; if(pow(tmp,i)==n) ans=i; } printf("%d\n",ans); } return 0; }