HDU 2504 又见GCD

题目:http://acm.hdu.edu.cn/showproblem.php?pid=2504

意思就是,已知gcd(a,c)=b,和a,b,求最小的c,其中c!=b。原以为既然c!=b,那么最小的当然是2b啦,可是提交了发先WA。回头分析发现,不是这么简单,原因在于a可能是c的倍数,比如若a=6b,那么c=2b,3b,4b都不是答案,因为这时候gcd(a,c)=2b,3b,2b。既然如此,只好一个一个试了,从2b开始,一次增加b,直到gcd(a,c)=b。代码如下:

代码
1 #include <iostream>
2  using namespace std;
3
4 int gcd(int a,int b)
5 {
6 while(a%b)
7 {
8 int r=a%b;
9 a=b;
10 b=r;
11 }
12 return b;
13 }
14
15 int main()
16 {
17 int n,a,b,c,i,j;
18 cin>>n;
19 for (i=0;i<n;i++)
20 {
21 cin>>a>>b;
22 c=2*b;
23 while(gcd(a,c)!=b)
24 {
25 c+=b;
26 }
27 cout<<c<<endl;
28 }
29 return 0;
30 }

 

posted on 2010-09-27 12:30  小交响曲  阅读(539)  评论(2编辑  收藏  举报

导航