gcd推导
欧几里得算法有性质: gcd(a, b)=gcd(b, a%b);
那么如何证明呢~
法1:
我们先假设其成立并且有
gcd(a, b)=gcd(b, a%b)=d;
a=k*b+c即a%b=c(我们假设a>=b, 因为a<b的话那么gcd(b, a%b)就相当于交换一下a, b的位置啦);
那么有d|a=d|k*b+d|c (d|a表示a整除d),即在d是(a, b)的公约数的前提下我们可以得到d也是(b, c)的公约数.
假设(a, b)的公约数集合为A, (b, c)的公约数集合为B, 那么有B为A的子集, 如果我们能再证得A为B的子集的话,那么就有A=B,所以A, B中的最大元素也相等,即gcd(a, b)=gcd(b, c);
对于后者的证明我们不防再假设d'|(b, c), 即d'|b , d'|c, 又 a=k*b+c, 所以有 d'|a=d'|k*b+d'|c, 即在d'是(b, c)公约数的前提下我们可以得到d'也是(a, b)的公约数.
综上所述 A=B, 所以gcd(a, b)=gcd(b, c)=gcd(b, a%b). (其实通过这里我们可以看出gcd()里面参数的顺序也是不影响答案的);
法2:
我们先假设
gcd(a, b)=gcd(b, a%b)=d;
x*d=a, y*d=b;
a=k*b+c即gcd(a, b)=gcd(b, c);
则有 c=a-k*b=x*d-k*y*d=(x-k*y)*d;
这里如果我们能证明 gcd(y, x-k*y)=1的话,我们就能证明gcd(b, c)=d啦(很显然嘛,y与x-k*y互质的话,b与c的最大公约数为d)~
我们假设gcd(y, x-k*y)=gg, y=gg*h, x-k*y=gg*j, 那么x=gg*j+k*y=gg*j+k*gg*h, 所以a=x*d=d*gg*(j+k*h), b=y*d=d*gg*h, 所以有gcd(a, b)>=d*gg;
又因为我们前面假设了gcd(a, b)=d, 所以gg=1, 即gcd(y, x-k*y)=1;
所以原式得证~
⊆
gcd推导的更多相关文章
- HDU 2685 GCD推导
求$(a^n-1,a^m-1) \mod k$,自己手推,或者直接引用结论$(a^n-1,a^m-1) \equiv a^{(n,m)}-1 \mod k$ /** @Date : 2017-09-2 ...
- 数学--数论--HDU 5382 GCD?LCM?(详细推导,不懂打我)
Describtion First we define: (1) lcm(a,b), the least common multiple of two integers a and b, is the ...
- zoj.3868.GCD Expectation(数学推导>>容斥原理)
GCD Expectation Time Limit: 4 Seconds Memory Limit: 262144 KB ...
- hdu 5512 Pagodas 扩展欧几里得推导+GCD
题目链接 题意:开始有a,b两点,之后可以按照a-b,a+b的方法生成[1,n]中没有的点,Yuwgna 为先手, Iaka后手.最后不能再生成点的一方输: (1 <= n <= 2000 ...
- HDU1792A New Change Problem(GCD规律推导)
A New Change Problem Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 【推导】zoj3846 GCD Reduce
题意:给你n个正整数a1...an,一次操作是选择任意两个数ai,aj,将它们都替换成gcd(ai,aj).让你在5n步内将所有数变为1.或者输出不可能. 如果所有数的gcd不为1,显然不可能. 否则 ...
- 【推导】Codeforces Round #410 (Div. 2) C. Mike and gcd problem
如果一开始就满足题意,不用变换. 否则,如果对一对ai,ai+1用此变换,设新的gcd为d,则有(ai - ai+1)mod d = 0,(ai + ai+1)mod d = 0 变化一下就是2 ai ...
- GCD - Extreme (II) for(i=1;i<N;i++) for(j=i+1;j<=N;j++) { G+=gcd(i,j); } 推导分析+欧拉函数
/** 题目:GCD - Extreme (II) 链接:https://vjudge.net/contest/154246#problem/O 题意: for(i=1;i<N;i++) for ...
- BZOJ 2820: YY的GCD 莫比乌斯反演_数学推导_线性筛
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...
随机推荐
- js打开新页面与关闭当前页面
打开新的窗口window.open("help.html"); window.open("help.html"); 关闭页面<a href="j ...
- PHP常用框架
1.Thinkphp thinkphp是国内开发的框架,它有比较易读的手册,和大量的网上资源,所以我推荐大家首选thinkphp. 2.CodeIgniter 前一段时间我用过codeignite ...
- Mac上更新Ruby
因为准备在项目中使用bootstrap,在安装bootstrap过程中提示需要Ruby的版本在1.9.2以上,而目前使用的Ruby版本是Mac系统自带的1.8.7.所以需要对Ruby进行升级.这里使用 ...
- 教你一招:Excel中使用MID函数获取身份证中的出生年月日
MID字符串函数,作用是从一个字符串中截取出指定数量的字符 MID(text, start_num, num_chars) text被截取的字符 start_num从左起第几位开始截取(用数字表达 ...
- console.log((function f(n){return ((n > 1) ? n * f(n-1) : n)})(5))调用解析
console.log((function f(n){) ? n * f(n-) : n)})()); 5被传入到函数,函数内部三元计算,5 > 1成立,运算结果是5*f(4),二次运算,5*4 ...
- python 之 PIP 安装
1.安装的必备包 pip 和 setuptool 都要有, 这个可以从python.org网站下载 // setuptool 安装 下载地址 https://pan.baidu.com/s/1gf ...
- Size Balance Tree(SBT模板整理)
/* * tree[x].left 表示以 x 为节点的左儿子 * tree[x].right 表示以 x 为节点的右儿子 * tree[x].size 表示以 x 为根的节点的个数(大小) */ s ...
- js读书笔记
js读书笔记 基本类型的基本函数总结 1. Boolean() 数据类型 转换为true的值 转换为false的值 Boolean true false String 任何非空字符串 "&q ...
- curl实现发送Get和Post请求(PHP)
1.CURL介绍 CURL 是一个利用URL语法规定来传输文件和数据的工具,支持很多协议,如HTTP.FTP.TELNET等.最爽的是,PHP也支持 CURL 库.本文将介绍 CURL 的一些高级特性 ...
- Linux下长时间ping网络加时间戳并记录到文本
Linux下长时间ping网络加时间戳并记录到文本 由于一些原因,比如需要检查网络之间是否存在掉包等问题,会长时间去ping一个地址,由于会输出大量的信息而且最好要有时间戳,因此我们可以使用简单的 ...