二进制GCD
写在前面
全程抄书
想要进一步提高求 \(\gcd\) 的效率,可以通过不断去除因子 \(2\) 来降低常数,这就是“二进制 \(\gcd\) ”
具体实现:
若 \(x = y\) ,则 \(\gcd(x, y) = x\) 否则:
若 \(x, y\) 均为偶数,则 \(\gcd(x, y) = 2 * \gcd(x / 2, y / 2)\)
若 \(x\) 为偶数, \(y\) 为奇数, 则 \(\gcd(x, y) = \gcd(x / 2, y)\)
若 \(x\) 为奇数, \(y\) 为偶数, 则 \(\gcd(x, y) = \gcd(x, y / 2)\)
若 \(x, y\) 均为奇数,则 \(\gcd(x, y) = \gcd(x - y, y)\)
Code
int Gcd(int x, int y){//二进制GCD
int i = 0, j = 0;
if(x == 0) return y;
if(y == 0) return x;
while((x & 1) == 0) x >>= 1, ++i;
while((y & 1) == 0) y >>= 1, ++j;
if(j < i) i = j;
while(1){
if(x < y) x ^= y, y ^= x, x ^= y;
if(0 == (x -= y)) return y <<= i;
while(0 == (x & 1)) x >>= 1;
}
}
二进制GCD的更多相关文章
- 【数论】二进制GCD
二进制GCD GCD这种通用的算法相信每个OLER都会 ,辗转相除,代码只有四行 : int GCD(int a,int b){ if(b==0) return a; return GCD(b ...
- 二进制GCD算法解析
UPD 2018.3.30 这个好像就是更相减损术的样子emmm UPD 2018.5.22 好像不是更相减损术而是叫Stein算法的样子emmm 蒟蒻来做个二进制GCD笔记. 为什么要写这个东西呢, ...
- 二进制GCD算法 减少%的时间消耗
/* 二进制求最大公约数.由于传统的GCD,使用了%,在计算机运行过程中要花费大量的时间,所以,采取二进制的求法,来减少时间的消耗. 算法: 当a,b都是偶数时: gcd(a,b)=2*gcd(a/2 ...
- HDU - 5050 (大数二进制gcd)
It's time to fight the local despots and redistribute the land. There is a rectangular piece of land ...
- 用二进制方法求两个整数的最大公约数(GCD)
二进制GCD算法基本原理是: 先用移位的方式对两个数除2,直到两个数不同时为偶数.然后将剩下的偶数(如果有的话)做同样的操作,这样做的原因是如果u和v中u为偶数,v为奇数,则有gcd(u,v)=gcd ...
- 不同的GCD算法
分类: C语言程序2014-10-08 15:10 28人阅读 评论(0) 收藏 举报 gcdC语言程序位运算 早在公元前300年左右,欧几里得就在他的著作<几何原本>中给出了高效的解法- ...
- 秘制CSP模板
不定期更细中...... 声明1:由于js的问题导致VIEW CODE按钮只能点"I"附近才能展开代码 声明2:为了排版的美观,所有的解释以及需要留意的地方我都放在代码中了 声明3 ...
- bzoj 1876
传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1876 二进制gcd 学到了(' ' ) 高精还得压位,最开始没写压位,然后调了1h ...
- [学习笔记]Pollard-Rho
之前学的都是假的 %%zzt Miller_Rabin:Miller-Rabin与二次探测 大质数分解: 找到所有质因子,再logn搞出质因子的次数 方法:不断找到一个约数d,递归d,n/d进行分解, ...
随机推荐
- DX关联VS
// Windows API: #include <windows.h> // C 运行时头文件,测试可能会用到 #include <stdlib.h> //standa ...
- Centos7 搭建openldap完整详细教程(真实可用)
最近,由于公司需求,需要搭建openldap来统一用户名和密码,目前市面上几乎所有的工具都支持ldap协议,具体ldap的介绍这里就不详细说明了,这里主要记录一下如果部署openldap来实现Ldap ...
- 如果不空null并且不是空字符串才去修改这个值,但这样写只能针对字符串(String)类型,如果是Integer类型的话就会有问题了。 int i = 0; i!=''。 mybatis中会返回tr
mybatis 参数为Integer型数据并赋值0时,有这样一个问题: mybatis.xml中有if判断条件判断参数不为空时,赋值为0的Integer参数被mybatis判断为空,因此不执行< ...
- JavaSwing 船只停靠管理可视化(三)
JavaSwing 船只停靠管理可视化(一) JavaSwing 船只停靠管理可视化(二) JavaSwing 船只停靠管理可视化(三) JavaSwing 船只停靠管理可视化(四) JavaSwin ...
- java键盘输入方法-
字符串缓冲方式 BufferedReader bf = new BufferedReader(new InputStreamReader(System.in)); String line = null ...
- CAP理论和BASE理论及数据库的ACID中关于一致性及不同点的思考
CAP定理又被称作是布鲁尔定理,是加州大学伯克利分销计算机科学家里克在2000年提出,是分布式理论基础. CAP:是分布式系统的理论基础 [一致性 可用性 分区容错性] BASE理论是对CAP中 ...
- Mysql Cluster7.5.6 windows10 部署安装
部署方法网上很多,以下是我的实践过程,供大家参考. 1. 硬件:3台虚拟机,全是windows 10 x64 2. 网络架构: 管理节点:192.168.37.128 数据节点 / SQL节点: 19 ...
- 计算-服务器最大并发量-http协议请求-以webSphere服务器为例-考虑线程池
请求的处理流程 广域网上有大量的并发用户同时访问Web服务器,Web服务器传递请求给应用服务器(Web容器),Web容器传递请求给EJB容器,然后EJB容器发送数据库连接请求给数据库. 请求的处理流程 ...
- window10 安装Mysql 8.0.17以及忘记密码重置密码
一.安装Mysql8.0.17 1:首先去官网下载安装包 下载地址:https://dev.mysql.com/downloads/mysql/ 2:将解压文件解压到你安装的目录:D:\mysql\m ...
- 关于一些视图的基本操作(结合YGGL.sql)
二.操作题 1.创建视图emp_view2,包含员工编号,姓名,所在部门名称和收入. mysql> create or replace view emp_view2 -> as -> ...