辗转相除法
辗转相除法,也称为欧几里得算法,是一种用于求解两个整数的最大公约数的算法。它的基本思想是反复用较小数除较大数,然后用余数替换较大数,直到余数为零为止,此时的除数即为最大公约数。
具体步骤如下:
1. 将两个整数记为a和b(其中a >= b)。
2. 用b去除a,得到商q和余数r。
3. 若r等于0,则b即为最大公约数;若r不等于0,则将b赋值给a,将r赋值给b,然后返回第二步继续执行。
4. 最终得到的b即为最大公约数。
我也不废话给出辗转相除的函数:
int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
下面我给出它的其他写法:
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
还有python的写法:
def gcd(a, b):
while b != 0:
a, b = b, a % b
return a
还有java
import java.util.Scanner;
public class Main {
public static int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter two numbers: ");
int a = input.nextInt();
int b = input.nextInt();
int result = gcd(a, b);
System.out.println("GCD of " + a + " and " + b + " is: " + result);
}
}
当我们要计算两个整数a和b的最大公约数时,我们可以使用辗转相除法。
该算法基于以下观察:两个整数的最大公约数(GCD)等于其中较小数与两数相除的余数的最大公约数。
算法步骤如下:
1. 初始化变量a和b为输入的两个整数。
2. 在while循环中,不断执行以下操作,直到b等于0:
- 创建一个临时变量temp,并将其赋值为b的值。
- 计算a除以b的余数,并将结果赋值给b。
- 将temp的值赋给a。
3. 当b等于0时,说明a能够整除b,此时a的值即为两个整数的最大公约数。
4. 返回a作为最大公约数。
让我们通过一个例子来说明这个算法的工作原理。假设a=12,b=8。
第一次循环:
- temp = 8,b = 12 % 8 = 4,a = 8。
第二次循环:
- temp = 4,b = 8 % 4 = 0,a = 4。
此时,b等于0,循环结束。最终的a值为4,因此12和8的最大公约数为4。
这个算法的优势在于每次迭代都会减小较大的数,直到余数为0。它是一种高效的求解最大公约数的方法,适用于任意两个整数。
下面我举个例子:
假设我们要求解两个整数的最大公约数,例如a = 48,b = 18。
1. 将较大的数作为被除数,较小的数作为除数:a = 48,b = 18。
2. 用18去除48,得到商2和余数12。
3. 因为余数12不等于0,所以将18赋值给a,将12赋值给b。
4. 重复第2步。用12去除18,得到商1和余数6。
5. 因为余数6不等于0,所以将12赋值给a,将6赋值给b。
6. 重复第2步。用6去除12,得到商2和余数0。
7. 因为余数0等于0,所以最大公约数为当前的除数,即6。
因此,48和18的最大公约数为6。
java代码我单独解释下:
在上述代码中,我们定义了一个名为gcd
的静态函数,它接收两个整数参数a和b,并返回它们的最大公约数。在主函数中,我们首先创建一个Scanner对象,从用户处读取两个整数a和b,并将它们传递给gcd
函数进行计算。
gcd
函数的实现与前面C++版本中所述的相同。具体而言,它使用while循环来迭代计算最大公约数,直到余数为0时停止。在每次循环中,我们通过临时变量temp来交换a和b的值,将a赋值为b,将b赋值为a除以b的余数。
最后,我们在主函数中打印输出结果,显示输入的两个整数的最大公约数。
本文作者:2c237c6
本文链接:https://www.cnblogs.com/27dCnc/p/18568715
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步