Perfect Pth Powers
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 16791 | Accepted: 3810 |
Description
![](https://i-blog.csdnimg.cn/blog_migrate/623e192a7b5eca6dd8c4dfa91dd97386.jpeg)
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
Source
一直超时,,,把n改成64的居然就过了
ac代码
#include<stdio.h>
#include<string.h>
#include<math.h>
int pri[10010],isp[70010],cot;
void fun()
{
int i,j,m;
cot=0;
isp[0]=isp[1]=1;
m=(int)sqrt(66700+0.5);
for(i=2;i<66700;i++)
{
if(!isp[i])
{
pri[cot++]=i;
if(i<=m)
{
for(j=i*i;j<66700;j+=i)
{
isp[j]=1;
}
}
}
}
}
int gcd(int a,int b)
{
int t;
if(a<b)
{
return gcd(b,a);
}
if(b==0)
{
return a;
}
else
return gcd(b,a%b);
}
int main()
{
__int64 n;
fun();
while(~scanf("%I64d",&n)&&n)
{
int w=0,ans=0,i,j,k;
if(n<0)
{
w=1;
n=-n;
}
for(i=0;i<cot&&n>1&&pri[i]<=n;i++)
{
if(n%pri[i]==0)
{
int cnt=0;
while(n%pri[i]==0)
{
cnt++;
n/=pri[i];
}
ans=gcd(ans,cnt);
}
}
if(n>1)
ans=gcd(ans,1);
if(w)
{
while(ans%2==0)
ans/=2;
}
printf("%d\n",ans);
}
}