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

来源:互联网 发布:数据库外键能有几个 编辑:程序博客网 时间:2024/05/16 06:09
Perfect Pth Powers
Time Limit: 1000MS Memory Limit: 10000KTotal 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

171073741824250

Sample Output

1302

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;}elsereturn 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);}}


0 0
原创粉丝点击