码迷,mamicode.com
首页 > 其他好文 > 详细

【数论】【最大公约数】【枚举约数】CODEVS 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组

时间:2014-10-26 18:12:47      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   sp   div   on   问题   

对于一对数(p,q),若它们的gcd为x0,lcm为y0,

则:p*q/x0=y0,即q=x0*y0/p,

由于p、q是正整数,所以p、q都必须是x0*y0的约数。

所以O(sqrt(x0*y0))地枚举约数,依次用gcd判断。

 1 #include<cstdio>
 2 #include<cmath>
 3 using namespace std;
 4 typedef long long LL;
 5 LL limit,Q,P,To;
 6 int ans;
 7 LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}
 8 int main()
 9 {
10     scanf("%d%d",&P,&Q); limit=P*Q;
11     To=sqrt(limit);
12     for(LL i=P;i<=To;i++)
13       if(limit%i==0)
14         if(gcd(i,limit/i)==P)
15           ans++;
16     printf("%d\n",ans<<1);
17     return 0;
18 }

 

【数论】【最大公约数】【枚举约数】CODEVS 1012 最大公约数和最小公倍数问题 2001年NOIP全国联赛普及组

标签:style   blog   color   io   for   sp   div   on   问题   

原文地址:http://www.cnblogs.com/autsky-jadek/p/4052345.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!