介绍

二进制最大公约数算法避免了欧几里得算法(辗转相除法)的大量取模操作,有效减少了时间消耗,且更为方便。

原理

本算法基于以下事实:

对于两个数的最大公约数gcd(m, n),有
m<n时,gcd(m, n)=gcd(n, m)
m偶n偶时,gcd(m, n)=2*gcd(m/2, n/2)
m偶n奇时,gcd(m, n)=gcd(m/2, n)
m奇n偶时,gcd(m, n)=gcd(m, n/2)
m奇n奇时,gcd(m, n)=gcd(n, m-n)

采用递归即可。

实现

inline int GCD(int x,int y)
{int i,j;if(x==0) return y;if(y==0) return x;for(i=0;0==(x&1);++i)x>>=1;   // 去掉所有的2for(j=0;0==(y&1);++j)y>>=1;   // 去掉所有的2if(j<i) i=j;while(1){if(x<y)x^=y,y^=x,x^=y;   // 若 x < y 交换 x, yif(0==(x-=y)) return y<<i;  // 若x == y, gcd == x == y (就是在辗转减,while(1)控制)while(0==(x&1))x>>=1; // 去掉所有的2}
}
int get_lcm(int a,int b)///获得最小公倍数
{int x=a;int y=b;while(b){int t=a;a=b;b=t%b;}return x/a*y;
}

最大公约数(二进制算法)相关推荐

  1. 四种求最大公约数的算法 C / C++

    文章目录 前言 一.辗转相除法 1. 算法简介 2. 算法描述 3. 代码及复杂度 二.穷举法(枚举法) 1. 算法简介 2. 算法描述 3. 代码及复杂度 三.更相减损法 1. 算法简介 2. 算法 ...

  2. mysql最大公约数_最大公约数用算法

    世界上最早的算法:辗转相除法(求两个自然数最大公约数) 在数学界,辗转相除法,又称欧几里得算法,被认为是世界上最早的算法(公元前300年),该算法用于求两个最大公约数的算法.辗转相除法首次出现于欧几里 ...

  3. 最大公约数简便算法_最大公约数的求法

    展开全部 质因数分解法:把每个数分别分解质因数,再把32313133353236313431303231363533e4b893e5b19e31333339666666各数中的全部公有质因数提取出来连 ...

  4. JAVA:实现十进制转二进制算法(附完整源码)

    JAVA:实现十进制转二进制算法 package com.thealgorithms.conversions;import java.util.Scanner;/*** This class conv ...

  5. python:实现十进制转二进制算法(附完整源码)

    python:实现十进制转二进制算法 def decimal_to_binary(num: int) -> str:if isinstance(num, float):raise TypeErr ...

  6. python以递归的方式实现十进制转二进制算法(附完整源码)

    python以递归的方式实现十进制转二进制算法 def binary_recursive(decimal: int) -> str:decimal = int(decimal)if decima ...

  7. 二进制算法_本地二进制模式算法:其背后的数学❗️

    二进制算法

  8. 八进制转二进制算法 c语言,二进制和八转换互转-二进制转八进制-八进制转二进制-嗨客网...

    二进制整数转八进制 算法 二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐. 八进制整数转二进制 算法 八进制整数转换为二进制 ...

  9. 辗转取余数php算最小公约数,(算法)求最大公约数和最小公约数

    最大公约数定义: 最大公约数(最大公因数)就是几个数公有的因数中最大的一个. 最小公倍数定于: 最小公倍数就是几个数公有的倍数中最小的一个. 求最小公倍数的算法:(两个数的乘积/最大公约数) 求最大公 ...

最新文章

  1. Struts2的拦截器只允许有权限用户访问action
  2. 几经沉浮,人工智能前路何方?
  3. unix amp; linux oralce用户 内存使用情况分析
  4. 值得推荐的中文版WF/WCF图书
  5. Ionic3 通讯录索引的实现
  6. (七)Maven使用的最佳实践
  7. 玩转oracle 11g(25):手工删除oracle归档日志后操作步骤 和修改用户默认解锁时间
  8. php自动抓取文章图片,从文章中提取图片,把图片保存到本地,自动提取缩略图...
  9. Java 学习之反射机制“解刨”分解类,并获取内容!
  10. iOS调试篇:多线程造成的崩溃
  11. 拓端tecdat|R语言使用Metropolis- Hasting抽样算法进行逻辑回归
  12. 《剑指Offer》刷题笔记汇总
  13. 面试--拼多多面试--后台开发实习生
  14. 【计算机图形学】几何
  15. RNA-seq Review:RNA-seq数据分析
  16. veu项目实践详细笔记(一)
  17. UC Android官方下载,手机uc浏览器下载并安装-uc浏览器app最新版本v13.3.9.1119 安卓官方版 - 极光下载站...
  18. Linux之恢复删除的数据
  19. 号外 ! 号外 ! V7包下的View都来此参加同学会 , 快来看,快来看...
  20. 微服务架构 API 的开发与治理

热门文章

  1. 申请高新技术企业有什么好处?
  2. 天虹软件测试笔试,是驴是马拉出来看 游戏测试FX5500显卡实战
  3. 停车场微信支付系统 本地服务器,一种基于微信支付的停车自动收费系统
  4. RoadFlow ASP.NET Core工作流引擎IIS部署
  5. 计算机二级填空题范围,计算机二级msoffice题库及答案
  6. 微信一年扫出多少个二维码?
  7. 初升高零基础学哪种计算机编程好,零基础初三还有机会逆袭吗
  8. 防止被反编译获取源码,PB加密,PBD加密,杜绝PB程序反编译 下载
  9. 解开人人网登录密码的 RSA 加密--转载
  10. Word排版技巧笔记