最大公约数(英语:Greatest Common Divisor,简写为G.C.D.;或Highest Common Factor,简写为H.C.F.)是指某几个整数共有约数中最大的一个。如12
和18
的最大公约数为6
最小公倍数(英语:Lowest Common Multiple,简写为L.C.M.)是数论中的一个概念。若有一个数X
,可以被另外两个数A
、B
整除,且X
大于(或等于)A
和B
,则X
为A
和B
的公倍数。A
和B
的公倍数有无限个,而所有的公倍数中,最小的公倍数就叫做最小公倍数。如12
和18
的最小公倍数为36
。
本关要求用for
循环语句来分别求两个正整数的最大公约数和最小公倍数。
本关任务
本关的编程任务是实现step4/GcdAndLcm.cpp
文件中的Gcd
和Lcm
函数,代码如下:
// 求两个正整数的最大公约数
int Gcd(int a,int b)
{
// 请在此提供实现代码
}
// 求两个正整数的最小公倍数
int Lcm(int a,int b)
{
// 请在此提供实现代码
}
测试说明
本关的测试文件是step4/GcdAndLcmTest.cpp
,负责对你写的实现代码进行测试。具体说明如下:
#include <iostream>
#include "GcdAndLcm.h"
using namespace std;
int main()
{
int m,n;
// 从命令行读入两个正整数
// 这两个数取自测试集的输入
cin >> m >> n;
cout << Gcd(m,n) << " " << Lcm(m,n) << endl;
}
上述main
函数从命令行读入,并将处理后的结果通过命令行输出。注意,step4/GcdAndLcmTest.cpp
的代码不能被修改。
其中:GcdAndLcm.h
文件代码如下:
#ifndef _ISLEAPYEAR_H_
#define _ISLEAPYEAR_H_
int Gcd(int ,int );
int Lcm(int ,int );
#endif
以下是平台对step4/GcdAndLcmTest.cpp
的测试样例:
测试输入:5 10
预期输出:5 10
测试输入:6 9
预期输出:3 18
测试输入:7 11
预期输出:11 77
int Gcd(int a,int b)
{
int i,j,k;
if(a >= b)
j = a;
else
j = b;
for(i = j; i >= 1; i--)
{
if(a % i == 0 && b % i == 0)
{
k = i;
break;
}
}
return k;
}
int Lcm(int a,int b)
{
int o,p,q;
if(a >= b)
p = b;
else
p = a;
for(o = p; o >= 1; o--)
{
if(a % o == 0 && b % o == 0)
{
q = o;
break;
}
}
return (a * b) / q;
}