首页 > 编程语言 >欧几里得算法与更相减损法复习

欧几里得算法与更相减损法复习

时间:2023-04-05 10:00:42浏览次数:28  
标签:return 复习 int gcd 欧几里得 else 减损 公因数

(1)欧几里得算法(辗转相除法),用于求两个整数的最大公因数

解释:

两个整数 a 和 b,假如a = b * x + y

a 和 b 的最大公因数是 d,

那么 a % d == 0,b % d == 0,也有 (b * x + y) % d == 0

∴ y % d == 0

即 a 和 b 的最大公因数也是 b 和 y 的最大公因数,而 y = a % b

1 int gcd (int a, int b) {
2     while (b != 0) {
3         int tmp = a;
4         a = b;
5         b = tmp % a;
6     }
7     return a;
8 }

或递归写法:

1 int gcd(int a, int b){
2     if (b == 0)
3         return a;
4     else
5         return gcd(b, a%b);
6 }

 

(2)更相减损法

假设 a > b

它们的最大公因数等于 a - b 和 b 的最大公因数

避免了大规模取模导致效率低下,但是运算次数比辗转相除法多很多

1 int gcd (int a, int b) {
2     if (a == b)
3         return a;
4     else if (a > b)
5         return gcd(a - b, b);
6     else if (a < b)
7         return gcd(b - a, a);
8 }

 

标签:return,复习,int,gcd,欧几里得,else,减损,公因数
From: https://www.cnblogs.com/iqemul/p/17288872.html

相关文章

  • 扩展欧几里得_逆元
    扩展欧几里得三种做法1.求解ax+by=gcd(a,b)ax+by=b*x1+a%b*y1==>x=y1;y=x1-a/b*y1;若b=0时,x=1,y=0;2.求解ax+by=c求解出a*x0+b*y0=d(若d|c则优解,不可整除则无解)然后x=x0*c/d,y=y0*c/d只是一个特解,不一定是最优解,可以求解齐次方程的通解,然后可以3.求解a*x......
  • 会计学第1章-总论-期末复习
    一、会计的基本概念1.1会计的产生和发展1.1.1会计的产生会计起源的标志:中国——书契(帐单)古巴比伦——黏土记录板印度——贝多罗树叶记录埃及——纸草文书会计产生的根本原因:人们对经济效益的追求(以尽可能少的劳动消耗,尽可能节省的劳动费用,获得尽可能大的劳动成果)。“会......
  • Goalng:基础复习一遍过
    Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。  剖析Helloworld  新建文件main.go写入以下内容:packagemainimport"fmt"funcmain(){fmt.Println("HelloWorld!")}其中,packgemain 的作用是声明了mai......
  • 02142数据结构导论复习笔记
    第一章概论概论⭐⭐数据结构:计算机组织数据和存储数据的方式。数据结构:指一组相互之间存在一种或多种特定关系的数据的组织方式和它们在计算机内的存储方式,以及定义在该组数据上的一组操作。引言⭐⭐算法+数据结构=程序数据、数据元素和数据项⭐⭐⭐数据:所有被计......
  • 复习
    Markdowm复习标题三级标题四级标题 字体Hello,WordHello,wordHello,WordHello,Word 引用小杨姐姐前面加> 分割线第一种三个减号--- 第二种三个***也是 图片 要用英文的![]() 超链接跳转到小杨姐姐的空间 英文[]() 列表......
  • Spring源码复习
    Bean的生命周期 ApplicationContextCentralinterfacetoprovideconfigurationforanapplication.*Thisisread-onlywhiletheapplicationisrunning,butmaybe*reloadediftheimplementationsupportsthis.**<p>AnApplicationContextprovides:*<ul......
  • C#复习笔记-委托
       委托是一种引用类型,委托定义了了一类可以被委托实例调用的方法。它定义了方法的返回值类型和参数类型。定义了一个名为FeedBack的委托,返回一个int类型的值,带有一个int类型的参数。可以将任何类型或者结构中与委托类型匹配的方法传递给委托,可以是静态方法也可以是实例方法......
  • 新概念2册L75笔记(复习一般过去时&系动词:变化)
    L75SOS单词理解语法理解一般过去时功能:发生在过去的事情;礼貌委婉。关键词:过去具体时间(yesterday/ago/last…)课文理解......
  • C 语言程序设计复习
    第一章程序设计和C语言计算机程序一组计算机能够识别和执行的指令计算机语言机器语言计算机只能识别由0和1组成的指令能够别计算机识别和接受的二进制代码成为机器指令机器指令的集合就是机器语言符号语言(汇编语言)计算机不能直接识别和执行,需要汇编程序将其转换为机......
  • 进制转化复习( 万能的a进制转化为b进制)
    进制转化复习十进制转化为十六进制Description十六进制数是在程序设计时经常要使用到的一种整数的表示方式。它有0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F共16个符号,分别表示十进制数的0至15。十六进制的计数方法是满16进1,所以十进制数16在十六进制中是10,而十进制的17在十六进制中......