当前位置: 首页 > ops >正文

辗转相除法

辗转相除法,也称为欧几里得算法,是一种用于求解两个整数的最大公约数的算法。它的基本思想是反复用较小数除较大数,然后用余数替换较大数,直到余数为零为止,此时的除数即为最大公约数。

具体步骤如下:
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 % breturn 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的余数。

最后,我们在主函数中打印输出结果,显示输入的两个整数的最大公约数。

http://www.xdnf.cn/news/11294.html

相关文章:

  • 前端插件clipboard 操作剪切板
  • Python入门教程(保姆级),从零基础入门到精通
  • gson快速入门和使用详解
  • cordova 一个将web应用程序封装成app的框架
  • C++ lambda表达式用法说明
  • Oracle中decode函数详解
  • 麦克斯韦方程组(彩图完美解释版)
  • 设计模式之单例、工厂、观察者模式
  • 张国荣一生57部电影海报全集
  • Kali-登录暴力破解器工具-medusa使用
  • 【硬件工程师】一次性讲透RS485接口
  • 数字版权管理 DRM 简介
  • 什么是RIA技术,RIA技术概览
  • 常用计算机外部设备有哪些,常用的计算机外设有哪些?
  • [转载]希捷固件门7200.12 CC46固件升级方法
  • Verilog任意分频器设计
  • 史蒂夫·乔布斯 - 简介
  • 个人博客搭建流程(域名、主机、解析、源码、搭建)全程详解
  • Template、ItemsPanel、ItemContainerStyle、ItemTemplate区别和联系
  • JSP基于Java的网咖计费管理系统91y3v程序+源码+数据库+调试部署+开发环境
  • 修改服务器网卡设置,网络适配器怎么设置网络好 完美的三种网络适配器设置方法...
  • linux虚拟机 Ubuntu 安装方法
  • iOS 7新功能汇总!
  • 《你不可不知的人性》刘墉 读书笔记(五)
  • 背单词软件 单词风暴 分享id_周一考研高效背单词系列(一):利用单词软件如何背好单词...
  • 中国最好的一些源码下载站点排名!
  • eclipse3.3.X版本中文语言包下载及安装
  • 基于单片机智能温度控制器系统设计
  • [Unity3D] 3D贪吃蛇
  • Lotus Notes 的新用户最需知道的十件事