最大公约数(二进制算法)
介绍
二进制最大公约数算法避免了欧几里得算法(辗转相除法)的大量取模操作,有效减少了时间消耗,且更为方便。
原理
本算法基于以下事实:
对于两个数的最大公约数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;
}
最大公约数(二进制算法)相关推荐
- 四种求最大公约数的算法 C / C++
文章目录 前言 一.辗转相除法 1. 算法简介 2. 算法描述 3. 代码及复杂度 二.穷举法(枚举法) 1. 算法简介 2. 算法描述 3. 代码及复杂度 三.更相减损法 1. 算法简介 2. 算法 ...
- mysql最大公约数_最大公约数用算法
世界上最早的算法:辗转相除法(求两个自然数最大公约数) 在数学界,辗转相除法,又称欧几里得算法,被认为是世界上最早的算法(公元前300年),该算法用于求两个最大公约数的算法.辗转相除法首次出现于欧几里 ...
- 最大公约数简便算法_最大公约数的求法
展开全部 质因数分解法:把每个数分别分解质因数,再把32313133353236313431303231363533e4b893e5b19e31333339666666各数中的全部公有质因数提取出来连 ...
- JAVA:实现十进制转二进制算法(附完整源码)
JAVA:实现十进制转二进制算法 package com.thealgorithms.conversions;import java.util.Scanner;/*** This class conv ...
- python:实现十进制转二进制算法(附完整源码)
python:实现十进制转二进制算法 def decimal_to_binary(num: int) -> str:if isinstance(num, float):raise TypeErr ...
- python以递归的方式实现十进制转二进制算法(附完整源码)
python以递归的方式实现十进制转二进制算法 def binary_recursive(decimal: int) -> str:decimal = int(decimal)if decima ...
- 二进制算法_本地二进制模式算法:其背后的数学❗️
二进制算法
- 八进制转二进制算法 c语言,二进制和八转换互转-二进制转八进制-八进制转二进制-嗨客网...
二进制整数转八进制 算法 二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐. 八进制整数转二进制 算法 八进制整数转换为二进制 ...
- 辗转取余数php算最小公约数,(算法)求最大公约数和最小公约数
最大公约数定义: 最大公约数(最大公因数)就是几个数公有的因数中最大的一个. 最小公倍数定于: 最小公倍数就是几个数公有的倍数中最小的一个. 求最小公倍数的算法:(两个数的乘积/最大公约数) 求最大公 ...
最新文章
- Struts2的拦截器只允许有权限用户访问action
- 几经沉浮,人工智能前路何方?
- unix amp; linux oralce用户 内存使用情况分析
- 值得推荐的中文版WF/WCF图书
- Ionic3 通讯录索引的实现
- (七)Maven使用的最佳实践
- 玩转oracle 11g(25):手工删除oracle归档日志后操作步骤 和修改用户默认解锁时间
- php自动抓取文章图片,从文章中提取图片,把图片保存到本地,自动提取缩略图...
- Java 学习之反射机制“解刨”分解类,并获取内容!
- iOS调试篇:多线程造成的崩溃
- 拓端tecdat|R语言使用Metropolis- Hasting抽样算法进行逻辑回归
- 《剑指Offer》刷题笔记汇总
- 面试--拼多多面试--后台开发实习生
- 【计算机图形学】几何
- RNA-seq Review:RNA-seq数据分析
- veu项目实践详细笔记(一)
- UC Android官方下载,手机uc浏览器下载并安装-uc浏览器app最新版本v13.3.9.1119 安卓官方版 - 极光下载站...
- Linux之恢复删除的数据
- 号外 ! 号外 ! V7包下的View都来此参加同学会 , 快来看,快来看...
- 微服务架构 API 的开发与治理