欧几里得算法与更相减损法复习
(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 }
认真过好每一天
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律