首页 > 其他 > 详细

uva10622

时间:2017-05-04 19:30:56      阅读:207      评论:0      收藏:0      [点我收藏+]

题目连接:UVA - 10622 

 1 #include<cstdio>
 2 #include<cstring>
 3 long long x;
 4 int cnt;
 5 int pri[50100];
 6 int vis[50100];
 7 void is_pri()      //预处理素数表
 8 {
 9     memset(vis,0,sizeof(vis));
10     cnt=0;
11     for(int i=2;i<300;i++) if(!vis[i])
12         for(int j=i*i;j<50100;j+=i)
13             vis[j]=1;
14     for(int i=2;i<50100;i++) if(!vis[i])
15         pri[cnt++]=i;
16 }
17 int gcd(int x,int y)
18 {
19     return y==0?x:gcd(y,x%y);
20 }
21 int maxp(long long x)   //利用唯一分解定理
22 {
23     long long y=x;
24     x=x<0?-x:x;
25     int tmp;
26     int ans=0;
27     for(int i=0;i<cnt&&pri[i]<=x;i++)
28     {
29         tmp=0;
30         while(x%pri[i]==0) {tmp++;x/=pri[i];}
31         ans=gcd(ans,tmp);  //求指数的最大公因数
32     }
33     if(ans==0) return 1;
34     if(y<0) while(ans%2==0) ans/=2;
35     return ans;
36 
37 }
38 int main()
39 {
40     is_pri();
41    // for(int i=0;i<cnt;i++) printf("%d ",pri[i]);
42     while(scanf("%lld",&x)&&x)
43     {
44         printf("%d\n",maxp(x));
45 
46     }
47 }

 

uva10622

原文:http://www.cnblogs.com/yijiull/p/6808980.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!