您的位置:首页 > Web前端

POJ 题目1730 Perfect Pth Powers(质因子分解)

2014-11-22 00:35 477 查看
Perfect Pth Powers

Time Limit: 1000MS Memory Limit: 10000K
Total Submissions: 16791 Accepted: 3810
Description


We say that x is a perfect square if, for some integer b, x = b2. Similarly, x is a perfect cube if, for some integer b, x = b3. More generally, x is a perfect pth power
if, for some integer b, x = bp. Given an integer x you are to determine the largest p such that x is a perfect pth 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 pth power.
Sample Input
17
1073741824
25
0

Sample Output
1
30
2

Source

Waterloo local 2004.01.31

思路:http://blog.csdn.net/lyhvoyage/article/details/40210323

一直超时,,,把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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: