题目1056:最大公约数
-
题目描述:
-
输入两个正整数,求其最大公约数。
-
输入:
-
测试数据有多组,每组输入两个正整数。
-
输出:
-
对于每组输入,请输出其最大公约数。
-
样例输入:
-
49 14
-
样例输出:
-
7
-
来源:
- 2011年哈尔滨工业大学计算机研究生机试真题
-
题目1438:最小公倍数
-
-
题目描述:
-
给定两个正整数,计算这两个数的最小公倍数。
-
输入:
-
输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数。
-
输出:
-
对于每个测试用例,给出这两个数的最小公倍数,每个实例输出一行。
-
样例输入:
-
10 14
-
样例输出:
-
70
本题直接采用欧几里得算法:
欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数。
定理:两个整数的最大公约数等于其中较小的那个数和两数的相除余数的最大公约数。最大公约数(greatest common divisor)缩写为gcd。
同时,最小公倍数为两数的乘积除以它们的最大公约数。
-
-
-
1438题稍做修改:# include <iostream> using namespace std; int main() { int a,b,c; while(cin>>a>>b) { int t=0; if(a<b){ t=a; a=b; b=t; } while(1){ t=a%b; if(t==0){ c=b; break; } a=b; b=t; } cout<<c<<endl; } return 0; } /************************************************************** Problem: 1056 Language: C++ Result: Accepted Time:0 ms Memory:1420 kb ****************************************************************/
-
# include <iostream> using namespace std; int main() { int a,b,c; while(cin>>a>>b) { int t=0,d=a*b; if(a<b){ t=a; a=b; b=t; } while(1){ t=a%b; if(t==0){ c=b; break; } a=b; b=t; } c=d/c; cout<<c<<endl; } return 0; } /************************************************************** Problem: 1438 Language: C++ Result: Accepted Time:10 ms Memory:1420 kb ****************************************************************/
-
-
-
-
-
-
-
-
-