很多题都是要求出什么最大公约数或者最小公倍数什么的,也有一些题目是和约数个数有关的,所以需要总结一下。

首先最大公约数和最小公倍数怎么求呢?

当然是观察法了,对于一些很聪明的孩纸他们一般随便一看就秒出答案,当然更聪明的孩纸知道最小公倍数并不容易求出。

所以需要先看出最大公约数,然后两数乘积/他们的最大公约数就是最小公倍数了。

我?我当然是上述方法求了。那样很快的。当然对于一些比较复杂的就要采取一些方法了。

如短除法,这样的方法实现很快的。

当求最大公约数的时候把列出的一个集合中的数字公共的约数全部除掉,最后左边一列数字的乘积即为答案,如图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.的更多相关文章

  1. Gcd&Exgcd算法学习小记

    Preface 对于许多数论问题,都需要涉及到Gcd,求解Gcd,常常使用欧几里得算法,以前也只是背下来,没有真正了解并证明过. 对于许多求解问题,可以列出贝祖方程:ax+by=Gcd(a,b),用E ...

  2. gcd&&exgcd&&斐蜀定理

    gcd就是求a和b最大公约数,一般方法就是递推.不多说,上代码. 一.迭代法 int gcd(int m, int n) { ) { int c = n % m; n = m; m = c; } re ...

  3. 读入 并查集 gcd/exgcd 高精度 快速幂

    ios_base::sync_with_stdio(); cin.tie(); ], nxt[MAXM << ], Head[MAXN], ed = ; inline void added ...

  4. 【数论】如何证明gcd/exgcd

    我恨数论 因为打这篇的时候以为a|b是a是b的倍数,但是懒得改了,索性定义 a|b 为 a是b的倍数 咳咳,那么进入正题,如何证明gcd,也就是 gcd(a,b) = gcd(b,a%b)? 首先,设 ...

  5. gcd && exgcd算法

    目录 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 2.扩展欧几里德算法 欧几里德算法与扩展欧几里德算法 1.欧几里德算法 #include<bits/stdc++.h> using ...

  6. Gcd&Exgcd

    欧几里得算法: \[gcd(a,b)=gcd(b,a\bmod b)\] 证明: 显然(大雾) 扩展欧几里得及证明: 为解决一个形如 \[ax+by=c\] 的方程. 根据裴蜀定理,当且仅当 \[gc ...

  7. ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄∀ ̄))

    gcd(a, b),就是求a和b的最大公约数 lcm(a, b),就是求a和b的最小公倍数 然后有个公式 a*b = gcd * lcm     ( gcd就是gcd(a, b), ( •̀∀•́ ) ...

  8. gcd, exgcd的证明

  9. 数论入门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 ...

随机推荐

  1. DBNull与Null的区别

    Null是.net中无效的对象引用. DBNull是一个类.DBNull.Value是它唯一的实例.它指数据库中数据为空(<NULL>)时,在.net中的值. null表示一个对象的指向无 ...

  2. Viewing the interface of your Swift code,查看Swift代码的头文件的三种方法

      Technical Q&A QA1914 Viewing the interface of your Swift code Q:  How do I view the interface ...

  3. 执行start-dfs.sh后,datenode没有启动的解决办法

    执行start-dfs.sh后,datenode没有启动,很大一部分原因是因为在第一次格式化dfs后,启动并使用了hadoop,后来又重新执行了格式化命令(hdfs namenode -format) ...

  4. 浏览器和服务器 对http请求(post get) url长度限制

    1. GET  URL长度限制 在Http1.1协议中并没有提出针对URL的长度进行限制,RFC协议里面是这样描述的,HTTP协议并不对URI的长度做任何的限制,服务器端 必须能够处理任何它们所提供服 ...

  5. Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页

    1.安装selenium pip install selenium Collecting selenium Downloading selenium-3.4.1-py2.py3-none-any.wh ...

  6. 小程序渲染html的两种方法

    一.使用文档自带的原生API  rich-text, nodes属性直接绑定需要渲染的html内容即可,文档参见这里:https://developers.weixin.qq.com/miniprog ...

  7. 面向切面编程AOP,一些通用装饰器

    1.一些装饰器,可以减少重复编写.比较常用的. 用的时候函数上面加上装饰器就可以.这是一些装饰器,加在函数或者方法上,减少了很多重复代码. 除此之外工作中也用一些mixin类大幅减少代码. impor ...

  8. Linux内核之旅

    http://www.kerneltravel.net/ Linux内核之旅 Linux Kernel Travel

  9. fs项目---->migrate-mongo的使用(一)

    tw项目中用的是mongo数据库,数据的迁移也是需求的一部分.这时我们可以使用migrate-mongo在nodejs中方便的进行数据的迁移,以下记录一下使用的过程. 一.migrate-mongo的 ...

  10. Java基础学习(一)---Java初识

    一.Java介绍 关于Java的诞生和发展网上比较多,在此就不再赘述了,可以参考http://i.cnblogs.com/EditArticles.aspx?postid=4050233. 1.1 J ...