约数,gcd,exgcd.
很多题都是要求出什么最大公约数或者最小公倍数什么的,也有一些题目是和约数个数有关的,所以需要总结一下。
首先最大公约数和最小公倍数怎么求呢?
当然是观察法了,对于一些很聪明的孩纸他们一般随便一看就秒出答案,当然更聪明的孩纸知道最小公倍数并不容易求出。
所以需要先看出最大公约数,然后两数乘积/他们的最大公约数就是最小公倍数了。
我?我当然是上述方法求了。那样很快的。当然对于一些比较复杂的就要采取一些方法了。
如短除法,这样的方法实现很快的。

当求最大公约数的时候把列出的一个集合中的数字公共的约数全部除掉,最后左边一列数字的乘积即为答案,如图1。
很显然吧因为最大公约数就是每个数字中都能整除的数字且最大,所以他们公共的约数之积就是最大的公约数。
当求最小公倍数的时候呢?把这个集合任意几个(有的时候可能是1个)数字的约数除下,最后一圈数字相乘即为答案。如图2.。
这里由于下面是最根本的数字要相乘很显然,由于是最小公倍数,所以这个数字满足可以整除任何数字所以呢,由于每次都把一堆数字的存在的倍数都找出来,那么,这些数字相乘即为总体的倍数。原理其实就是把所有数字重复出现的质因数去掉,所有数字乘起来那这一定是最小公倍数了。说是显然其实也不过分。
这样就解决了求出最大公约数和最小公倍数的问题了。当然这个是针对多个数字求最大公约数和最小公倍数的了。
如果对于两个数字求最大公约数呢,换个名字gcd.那么就直接gcd了。
gcd(a,b)=gcd(b,a%b);(a>=b)
证明:设a=mc,b=nc;r=mc-knc=(m-kn)*c 因为 c|r 断定m-kn与n互质,则gcd(b,r)=c == gcd(a,b);
断定的话利用反正法法证明:设m-kn=xd,n=yd m-kn与n不互质有约数d 那么此时 a=(xd+kyd)c。b=ydc;显然a,b最大公约数为dc 不为c与原命题不相符。
因此c是b和r的最大公约数。证毕。
那么只要这样递归下去不断取%一定有b=0且此时最大公约数还在为c。得到答案。
当做高精gcd时就需要更相减损法了,因为%的高精不好写。
更相减损法:gcd(2a,2b)=gcd(a,b);gcd(a,b)=gcd(a,a-b)=gcd(b,a-b);
如果两个都为偶数那么除以2,互质则相减。这样最后a==b的时候最大公约数=2的乘积*等数。
证明:显然。
仔细想一下对于任意a,b的最大公约数d 都有d|a d|b 所以 d|(a-b);
所以在有限的次数中一定能得到等数这时就求出了最大公约数了...
写到这里我的头也比较懵吧,证明都看懂了,可最后求出的最大公约数还是不太懂,这可能需要时间沉淀吧,反正记住就行了;
约数个数:
对于一个整数n我们总能将其表示成n=p1^a1+p2^a2+...+pn^an;其中p为质因数
那么这样就很显然了约数个数=(a1+1)(a2+1)*...(an+1);因为a^0也算所以要加1;注意严谨。
约数和:
n的约数和=(p1^0+p1^1+...+p1^a1)(p2^0+...p2^a2)...(pn^0+pn^1+...pn^an);
证明:网上似乎没有证明,问学长学长说显然,我仔细看了一下发现是比较显然的吧。
仔细想发现是对的,但不知道为什么,时间来沉淀吧。
约数,gcd,exgcd.的更多相关文章
- Gcd&Exgcd算法学习小记
Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...
- gcd&&exgcd&&斐蜀定理
gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...
- 读入 并查集 gcd/exgcd 高精度 快速幂
ios_base::sync_with_stdio(); cin.tie(); ], nxt[MAXM << ], Head[MAXN], ed = ; inline void added ...
- 【数论】如何证明gcd/exgcd
我恨数论 因为打这篇的时候以为a|b是a是b的倍数,但是懒得改了,索性定义 a|b 为 a是b的倍数 咳咳,那么进入正题,如何证明gcd,也就是 gcd(a,b) = gcd(b,a%b)? 首先,设 ...
- gcd && exgcd算法
目录 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 2.扩展欧几里德算法 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 #include<bits/stdc++.h> using ...
- Gcd&Exgcd
欧几里得算法: \[gcd(a,b)=gcd(b,a\bmod b)\] 证明: 显然(大雾) 扩展欧几里得及证明: 为解决一个形如 \[ax+by=c\] 的方程. 根据裴蜀定理,当且仅当 \[gc ...
- ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))
gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm ( gcd就是gcd(a, b), ( •̀∀•́ ) ...
- gcd, exgcd的证明
- 数论入门2——gcd,lcm,exGCD,欧拉定理,乘法逆元,(ex)CRT,(ex)BSGS,(ex)Lucas,原根,Miller-Rabin,Pollard-Rho
数论入门2 另一种类型的数论... GCD,LCM 定义\(gcd(a,b)\)为a和b的最大公约数,\(lcm(a,b)\)为a和b的最小公倍数,则有: 将a和b分解质因数为\(a=p1^{a1}p ...
随机推荐
- VS2013 未找到与约束ContractName Microsoft.VisualStudio.Text.ITextDocumentFactoryService
全是2012版本的 没找到2013的! 控制面板>程序>程序和功能 找到如下选中软件右击修复 即可 需关闭VS2013 参考:https://blog.csdn.net/zhaoyun9 ...
- 开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ
开源C/C++网络库:ACE C++语言 跨平台Boost的ASIO C++语言 跨平台libevent C语言 主要支持linux,新版增加了对windows的IOC ...
- headfirst python 01~02
列表 列表就像是数组 在python 创建一个列表时, 解释器会在内存中创建一个类似数组的数据结构来存储数据, 数据项自下而上(形成一个堆栈), 类似于其他编程语言中的数组. 列表中常用方法: cas ...
- Windows 8(64位)如何搭建 Android 开发环境与真机测试(转)
可以参考http://wenku.baidu.com/link?url=ghU6IFS1WJXLFKfM_0efv9YQEnMDBrdi9CXwirSs5IOLLeUfdIOh8OOVv0DX89Lt ...
- docker_File 执行报错总结
编写dockerfile [root@linux-node1 ~/dk]# cat Dockerfile # this is a docker File FROM centos MAINTAINER ...
- wvblk 把 xp、2003、win7(32位) 装入 VHD
关键1:是[预安装]阶段F6加载wvblk驱动: or 在还原ghost镜像后,导入wvblk驱动. 关键1.5:对于 win7(32位)来说,还可以在设备管理器内,通过添加“过时”硬件的方式导入wv ...
- 8 -- 深入使用Spring -- 5...3 使用@CacheEvict清除缓存
8.5.3 使用@CacheEvict清除缓存 被@CacheEvict注解修饰的方法可用于清除缓存,使用@CacheEvict注解时可指定如下属性: ⊙ value : 必须属性.用于指定该方法用于 ...
- DES ECB 模式 JAVA PHP C# 实现 加密 解密 兼容
版本一: JAVA: import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sun.misc.BASE64Decoder; i ...
- ASP.NET MVC 4 (十三) 基于表单的身份验证
在前面的章节中我们知道可以在MVC应用程序中使用[Authorize]特性来限制用户对某些网址(控制器/控制器方法)的访问,但这都是在对用户认证之后,而用户的认证则依然是使用ASP.NET平台的认证机 ...
- ASP.NET MVC 4 (十一) Bundles和显示模式
Bundles用于打包CSS和javascript脚本文件,优化对它们的组织管理.显示模式则允许我们为不同的设备显示不同的视图. 默认脚本库 在VS创建一个MVC工程,VS会为我们在scripts目录 ...