用辗转相除法,求两个整数的最大公约数,提示需先判断两个数的大小
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "Enter two integers: ";
cin >> a >> b;
// 首先判断a和b的大小,确保a是较大的数
if (a < b)
{
int temp = a;
a = b;
b = temp;
}
// 使用辗转相除法求最大公约数
int r = a % b;
while (r != 0)
{
a = b;
b = r;
r = a % b;
}
// 输出结果
cout << "The greatest common divisor of " << a << " and " << b << " is " << b << endl;
return 0;
}
#include <iostream>
using namespace std;
int main()
{
int a, b, t;
cout << "Enter two positive integers: ";
cin >> a >> b;
// Swap a and b if necessary so that a <= b
if (a > b) {
t = a;
a = b;
b = t;
}
// Use the Euclidean algorithm to find the GCD of a and b
while (a != 0) {
t = a;
a = b % a;
b = t;
}
cout << "The GCD is " << b << endl;
return 0;
}
首先从标准输入中读取两个正整数a和b,然后在使用辗转相除法之前检查a和b的大小。如果a比b大,则交换它们的值。
接下来,程序使用辗转相除法找到a和b的最大公约数。在每次循环中,该算法计算b除以a的余数,并将其赋值给b,将原来的b赋值给a,直到a为0。此时,变量b中存储的值就是a和b的最大公约数。
最后,程序输出最大公约数b的值并返回0作为结束代码。
#include <stdio.h>
#include <math.h>
int main(){
int M,N,a,b;
int m,n,max,min,sum;
scanf("%d %d",&M,&N);
if(M<N){
a=N;
b=M;
}else{
a=M;
b=N;
}
if(M<=1000&&N<=1000){
for(int i=a; ;i--){
if(a%i==0&&b%i==0){
max=i;
break;
}
}
for(int k=1; ;k++){
if((a*k)%b==0){
min=k;
sum=a*k;
break;
}
}
}
printf("%d %d",max,sum);
return 0;
}
辗转相除法是指用较大的数除较小的数,然后用余数去除较小的数,接着用上一个除数去除上一个余数,如此循环,直至余数为0,此时上一个除数为原来两个数的最大公约数。因此,不需要在实施辗转相除法之前先判断两个整数的大小。以下是使用辗转相除法求解最大公约数的代码:
def gcd(a, b):
while b:
a, b = b, a % b
return a
其中,a和b分别为输入的两个整数。由于Python的语法比较简洁,直接使用while循环即可实现。若a和b的值较大时,该算法会比较高效。
关于如何求两个整数的最小公倍数,请参考以下代码:
def lcm(a, b):
return a * b // gcd(a, b)
其中,a和b分别为输入的两个整数。最小公倍数等于两个整数的乘积除以它们的最大公约数。由于Python的整除运算符"//"可以直接进行整数除法并向下取整,因此可以直接使用该符号来计算最小公倍数。