杭电2504 又见GCD
Posted William_xh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了杭电2504 又见GCD相关的知识,希望对你有一定的参考价值。
又见GCD
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 19985 Accepted Submission(s): 8352
Problem Description
有三个正整数a,b,c(0<a,b,c<10^6),其中c不等于b。若a和c的最大公约数为b,现已知a和b,求满足条件的最小的c。
Input
第一行输入一个n,表示有n组测试数据,接下来的n行,每行输入两个正整数a,b。
Output
输出对应的c,每组测试数据占一行。
Sample Input
2
6 2
12 4
Sample Output
4
8
题目看上去不难,但是就是我开始理解错了一个地方,我以为只要是最大公约数的两倍就行,但是在WA了。然后找到了一个例子,24 4 ?,这个?应该是20的,但根据我的算法的话应该是8,但8的话就是24 和8的最大公约数的,所以不成立。
所以,就暴力求解,从2*b到1000000之间找到最大的那个数字(符合条件的那个数字)。
然后附上代码:
#include <iostream> #include<math.h> #include <iomanip> #include<cstdio> #include<string> #include<map> #include<vector> #include<list> #include<algorithm> #include<stdlib.h> #include<iterator> #include<sstream> #include<string.h> #include<stdio.h> using namespace std; int gcd(int a,int b) { int big=a; int smal=b; int ck; if(big<smal) { ck=a; a=b; b=a; } int temp; while(smal>0) { temp=big%smal; big=smal; smal=temp; } return big; } int main() { int n; cin>>n; while(n--) { int a,b,c; cin>>a>>b; for(int i=2*b;i<1000000;i=i+b) { if(gcd(a,i)==b)//暴力寻找 { c=i; break; } } cout<<c<<endl; } return 0; }
以上是关于杭电2504 又见GCD的主要内容,如果未能解决你的问题,请参考以下文章