整除性(divisible):

引入了代表整除性。 m\n (m|n) 表示m整除n。注意这里的整除。表示的是n = km(k为整数)。

在整除性这里。m必须是个正数。也许你可以描述n 是 m 的k倍。这种描述中m完全可以是任何数。而在整除性中的表达m整除n,规定了m必须是个正数。而0没有限制。


那么回答以下问题:

1:什么是0的倍数?

2:什么能被0整除?

3:什么能被-1整除?

4:什么能被1整除?

5:2Pi能被Pi整除吗?

6: 2Pi能被2整除吗?

答案分别是:

1:0

2:没有任何数能被0整除。(因为m>0而在这里m=0)

3:同上没有任何数能被-1整除。也就是-1不能整除任何数(严格意义上来讲)

4:任何整数。

5:可以。根据整除性的定义 m>0  n/m 是一个整数即可。n m 是任何实数(m>0)

6:不可以。Pi是3.14... 是个无限不循环小数非整数。


最大公因子(greatest common divisor):

用符号 gcd(n,m)表示。也就是所谓的最大公约数了。

首要的就是解决求两个数的最大公约数的问题了。

http://www.cnblogs.com/Milkor/p4379621.html

根据上面的链接里的方法 基本上可以完美解决最大公约数的问题。

接下来探讨扩展欧几里德的使用和原理

 


扩展欧几里德(extended Euclidean):

描述:必然存在n',m'使得 n'n+m'm=gcd(n,m) 成立。

证明这个定理有关乎贝祖定理(即裴蜀定理)。要搜的话,最好搜裴蜀定理,有更多的资料。

裴蜀定理(Bézout's identity):

描述:对于nn'+mm'=d 这个方程有整数对解n',m',那么d一定是gcd(n,m)的倍数。(并且有解时,整数解对有无限对)

证明:

  分三步证明:

    证明1:证明有正整数对解n'm'的时候d一定是最小d(简称d0)的倍数。(这个d0我们还不能说是gcd(n.m)).

    证明2: 证明nn'+mm'=gcd(n,m)有正整数解对n'm'.

    证明3: 证明d0(最小d,之后不赘述)即位gcd(n,m).

 

我尽量详细描述。后有图版的。感谢贴出此图的吧主(吧主名字忘记了,抱歉,惭愧)。找了很久很久。

声明:能够满足nn'+mm'=d有正整数对解的值,这个d值是好值。

证明1:证明有正整数对解n'm'的时候d一定是最小d(简称d0)的倍数。(这个d0我们还不能说是gcd(n.m)).

    设d0 = nn'+mm' ,d0是最小好值。    ①

       d = nn'+mm' ,   d是任意好值。  ②

     要证明1,即证明d=kd0(k是正整数) 即d是d0的倍数

     带余除法 d/d0 -> d = kd0+r ③

      即要证明r = 0

     如果r>0 (r不可能<0)

      r = d-kd0 =  nn'+mm' - k(nn''+mm'') 由于  式子①和式子②中的m'n'是不同的 所以前者改用n'' m''来标记

         =  (n'-kn'')n + (m'-m'')m 

    整理得 r =  (n'-kn'')n + (m'-m'')m

           其中n'-kn'' 和 (m'-m'')均为整数,所以r应该是一个好值。但是如果r是一个好值,然而根据③有r<d0。所以这和d0是最小好值是矛盾的。

    所以r = 0.

   所以d = kd0 证毕。

 

证明2:nn'+mm'=gcd(n,m)有正整数解对n'm'.

  利用带余除法: (把余数当做除数,原因后有,符合欧几里得。) 

  r1 = n  -  k1 m  ①

  r2 = m  - k2 r1  ②

  r3 = r1  - k3 r2  ③

  r4 = r2  - k4 r3  ④

  r5 = r3  - k5 r4  ⑤

  ......

  r(n-1) = r(n-3) - k(n) r(n-2)  ⑥

  r(n) = r(n-2) - k(n) r(n-1)  ⑦

 

  图上利用数学归纳法证明对于所有的n的不同取值,存在u,v。使得r(n) = up+vq(图上的比较全,严谨)。 回忆作者(似乎是他的学生)在旁边的注解。数学归纳法就是先打好地板。然后确立好你能从n层走上n+1层。那么你就能从地板上走到天际。

  我在这里就不用数学归纳法了。我直接从头推到尾。(个人见解。)

  那么复合①②式子:

  r1 = n  - k1 m    ①

  r2 = m - k2 r1    ② 

  ① 代入 ② 

  r2  = (1+k1) m - k2 n  (形式上和原来的式子一样) 所以可以设该式为 r2 = s m -  tn。

  所以成立。

  那么继续 r2 = s m -  tn。复合 r3 = r1  - k3 r2  ③

  r3 = r1 - k3 (s m - tn)  代入式 ①

  r3 = n - k1m - k3(s m - t n)

  r3 = (1 + k3t) n - (k1+k3s) m (形式上和原来的式子一样) 所以可以设该式为 r3 = s m -  tn。   (顺序无所谓 只要符合贝组等式,即原等式的形式)

   由此一直递推。可以有

   r(n-1)= sm+tn   

  之后你可以手写一下或者思考一下证明欧几里得的过程 到最后一定会有余数 r = 0   (欧几里得的最后终点是gcd(0,n) = n)

  假设 ⑦ 达到这种情况。即r(n) = 0.

  gcd(n,m) = gcd(m,r1) = gcd(r1,r2) = gcd(r2,r3)... = gcd(r(n-1),r(n)) = gcd(r(n-1),0) = r(n-1).

  所以 gcd(n,m) = r(n-1) = sm + tn = nn'+mm'.证毕。

证明3:证明d0(最小d,之后不赘述)即为gcd(n,m).

  根据证明2。gcd(n,m) = nn'+mm'   其中 gcd(n,m)是好值

  d0是最小好值。根据证明1  gcd(n,m)|d0。

  设 c = gcd(n,m) / d0 (我们目的要证明c = 1)

  对于  d0 = nn'+mm'

  有 1 = n' (n/d0) + m' (m/d0) 

  其中 c|(n/d0) 把c = gcd(n,m) / d0 代入就可得。 c|(m/d0) .

  那么 c|1

  那么 c = 1.证毕

求解m',n'

现在让我们求nn'+mm'=gcd(n,m)的一组特解n',m'.

求解过程:

  设n>m

  n%m = r -> n = km+r -> r = n-km.

  另有 rr'' + mm'' = gcd(r,m) (这个m还是原来的m 对应的m''不是m',注意这个'另'字)

  由欧几里得定理得:

    rr'' + mm'' = gcd(r,m) = gcd(n,m)

     (n-km) r'' + mm'' = gcd(n,m)

     nr'' - kmr'' + mm'' = gcd(n,m)

     nr'' + m(m''-kr'') = gcd(n,m)

    所以 n' = r''            m' = m''- kr'' 

  那么我们只要求出r'' 和 m'' 就可以得到 n'   m'

      那么对 rr'' + mm''  = gcd(n,m) 做同上的处理。  就能形成递推关系。 你可以这样考虑 n' m‘ 需要 r'' 和 m''   而 r'' 和 m'' 需要  r''' 和 m'''......

    假如我们知道最终结果的 r''''''''''' 和 m''''''''''   (标点数不知多少,但是是有限的)那么我们可以一直向上推出  n' m' 交给计算机处理吧。递推关系。

  最后  r''''''''''' = 1 m''''''''''' = 0

  可以有证明:

  一直取模。最后余数会=0,且另外一个参数的值  = gcd(n,m)(因为gcd(0,a) = a) 所以另外一个解值为1 这个已经在证明裴蜀定理得第2条证明的时候 已经使用过了。所以不再赘述。

 

  递推关系有了。结尾判断有了。code.

 

 int x,y;
void EXGCD(int n,int m)
{
if(m==)
{
x = ;
y = ;
return;
}
EXGCD(m,n%m);
int t = x;
x = y;
y = t - n/m*y;
} // nx + my = gcd(n.m)
// 所以要控制一下输出!

EXGCD 扩展欧几里德

对于扩展欧几里得的应用不言而喻。

1:经典的求乘法逆元。

定义 a*b mod m = 1 则b是a关于m的逆元。求b

即 a*b = km + 1  ->  a*b - km = 1   (由前面的探讨,a和m要互素才能有解)

   那问题就是解出b了。 直接扩展欧几里得求解

2:求解二元方程,判断二元方程有没有整数解对。

  其实1是2的一个实例。

其实判断二元方程有没有整数解对应该是裴蜀定理的应用。


中国剩余定理:

对于这个,我深深地意识到WIKI百科才是真爱啊。baidu sougou 百科,都是表面上华丽,却没有进入实质性的探究啊。

附上链接:

http://zh.wikipedia.org/wiki/中国剩余定理

我觉得没有什么可以再去添加的了。或者说我现在也添加不上去什么了。

只能说一句。裴蜀定理真的是贯穿求同余方程的全程。(具体数学中作者也是调皮地写到4.5(指nn'+mm'=d)又拯救了我们一次) 

在这里。将mod运算和同余方程联系在了一起。这是我之前怎么都想不通的。其实两者是相同的。

即知道xmod25 知道 xmod4 即能处理xmod100 便是中国剩余定理。这是我当时觉得百思不得其解的。因为百科上又或者是网上的资料都说韩信点兵之类的,也就只是描述mod运算。而非我们熟悉的同余方程组。

而后我知道了。   

x mod 25 = 2    ->         x ≡ 2 (mod 25)

x mod 4 = 3      ->         x ≡ 3 (mod 4)

以上转自blog <------强大严谨有钻研性的老人!!!

C = R1Y1C1C(mod G) = R1Y1(mod G) = R1 (mod G)

所以wiki上先证明了互素而有解,我觉得真是严谨,精辟。

主要就是利用Mi = M/mi 其中M为所有mi的值的乘积.

那么Mi % mj = 0.(i != j)

再利用逆元。使得构造出来的数符合条件。

有题:http://acm.hdu.edu.cn/showproblem.php?pid=1370


扩展中国剩余定理(一):

中国剩余定理对于m1 m2 m3 m4 m5...模的集合若相互均互质十分方便。(构造法确实精美)

但是如果m1 m2 m3 m4 m5 没有相互互质。中国剩余定理的那个构造法就是失效了。此时就是扩展中国剩余定理出现的地方了。

具体分析:

研究问题从小问题开始。我们只考虑2组数据。

x mod 3 = 1

x mod 6 = 2

比如这样的两组数据。

假如我们使用中国剩余定理。

而有3 | 6 那么就找不到6关于3的乘法逆元了(或者叫数论倒数)。也就是找不到6的某个倍数 mod 3 = 1

 

那么如果说出现了这样的问题了呢?(实际上确实是出现了)

方法一:广义上的孙子定理(论文)

这里直接给出解法,然后再去求证各个部分.

首先对模分别进行质因数分解。

对于因子2 分别有 2^2 2^5 取大的 2^5 来源于 同余7的那个式子。 

同理对于因子3      最大为3^2 来源于同余2的那个式子。

              5   来源于 同余7的式子

      7 来源于同余 2 的式子

然后可以将原式转成模互质的式子。然后对其进行求解即可。

 证明:重点在于为何能等价于对应素因子最大的那个式子。

先有 x≡b(mod m)    对m进行素因子分解有 x≡b(mod p1)  x≡b(mod p2)....... p 为 m的素因子。(带指数)这个是基本的同余定理。

然后 对于不同的式子有

 x ≡ b1(mod m1)

 x ≡ b2(mod m2)

....

可以等价于 x≡b1(mod p1)  x≡b1(mod p2).......

      x≡b2 (mod p1')  x≡b(mod p2').......

      ....

  其中p1 p1' 只是指数不同。

我们拿一组来讲。 x≡b1 (mod p1) 和 x≡b2 (mod p1')

根据上述的运算。我们要证明

 

x≡b1 (mod p1) 和 x≡b2 (mod p1') 

如果 p1>p1' (其实是比较指数大小)

则等价于 x≡b1 (mod p1) 

如果p1<p1'

则等价于  x≡b2 (mod p1') 

 

假如p1>p1'

先证:x≡b(mod m) 那么可以推得 x≡(b+km)(mod m)

        也就是说 如果 x≡b1(mod m) 等价于 x≡b2(mod m)  

   ps:一定有b1和b2之差=km 也就是说这组方程等价于一个方程    x≡b1(mod m) 或 x≡b2(mod m)   因为解x是一样的。

   

   那么对于 x≡b1 (mod p1) 和 x≡b2 (mod p1')

    因为p1|p1', 所以符合x≡b1 (mod p1) 一定符合 x≡b1 (mod p1‘) 

    而符合 x≡b1 (mod p1‘) 的x 一定符合  x≡b2 (mod p1'). 

    那么整个方程组等价于  x≡b1 (mod p1)

反之同理可证.这个方法是从一个中国(China,祖国要大写!)的论文上获得的。不过它没有证明。证明是我自己想出来 添加上去的。也许有疏忽。望见谅。

扩展中国剩余定理(二):

处理的还是非互素模的同余方程组求解问题。

先从2个方程组的规模(问题小规模)开始看起。

x≡b1 (mod m1)          

x≡b2 (mod m2)             

解2个式子的方程组并不难。可以思考一下。这个方程组联立之后目测有2个参数。我们可以利用扩展欧几里得算法求解。

x - b1 = n1m1 

x - b2 = n2m2

去x,  n1m1+b1 = b2+n2m2 

其中n1 n2 是未知的。所以化成 n1m1-n2m2 = b2 - b1.

求解n1 n2.

根据n1或者n2 可以直接获得 x 

题外话:考虑一个这样的问题: 给你一堆这样的m 和对应 b 注意各个b的值为一个范围。 问存在不存在一个x 满足其中2个式子。

         对于这个问题。我们只要枚举取两个式子。 判断 n1m1-n2m2 = b2 - b1 有无解即可。尽管b2 b1是范围。我们可以取公共范围。

那么考虑多个方程组的时候。

2个方程组我们可以解决。那我们是否可以把2个方程组合并成一个方程组呢,并且保留原来的形式呢?如果可以的话。多个方程组就解决了。因为2个合成1个。合成出来的那个又能和下一个方程合并。一直传递下去。

x≡b1 (mod m1)   

x≡b2 (mod m2)      

对于这个,我可以求得x的值。而我们需要的是满足多个的值。设这个值是k.那么k ≡ x(mod m1) 且 k≡x(mod m2)这样k值就能满足式1 和 式2

而 k ≡ x(mod m1) 且 k≡x(mod m2) -> k≡x(mod lcm(m1,m2))而这个式子始终保留了原来式子的特点 把k看作x x看作b 你就懂了。然后不断的继续下去。最后的值就是结果了。

 

具体数学数论章-----致敬Kunth的更多相关文章

  1. 具体数学二项式至生成函数章-----致敬Kunth

    关于标题取得这么奇怪.因为在具体数学中.这两章是分开叙述的.并且分别叙述得淋漓尽致! 我只参悟其中关于生成函数的一小部分内容(暂时于我够用了.) 提二项式系数之前不得不提组合数.以往在高中用的是符号C ...

  2. 具体数学斯特林数-----致敬Kunth

    注意这里讲的是斯特林数而非斯特林公式. 斯特林数分两类:第一类斯特林数 和 第二类斯特林数. 分别记为. 首先描述第二类斯特林数. 描述为:将一个有n件物品的集合划分成k个非空子集的方法数. 比如集合 ...

  3. NOIP复习之1 数学数论

    noip一轮复习真的要开始啦!!! 大概顺序是这样的 1.数学 2.搜索贪心 3.数据结构 4.图论 5.dp 6.其他 数学 1.数论 数论被称为数学皇冠上的明珠,他的重要性主要在于它是其他学习的祖 ...

  4. 数学--数论--HDU - 6395 Let us define a sequence as below 分段矩阵快速幂

    Your job is simple, for each task, you should output Fn module 109+7. Input The first line has only ...

  5. 数学--数论--HDU 2582 F(N) 暴力打表找规律

    This time I need you to calculate the f(n) . (3<=n<=1000000) f(n)= Gcd(3)+Gcd(4)+-+Gcd(i)+-+Gc ...

  6. Codeforces 622F 「数学数论」「数学规律」

    题意: 给定n和k,求 1 ≤ n ≤ 109, 0 ≤ k ≤ 106 思路: 题目中给的提示是对于给定的k我们可以求出一个最高次为k+1的关于n的通项公式. 根据拉格郎日插值法,我们可以通过k+2 ...

  7. 算法模板の数学&数论

    1.求逆元 int inv(int a) { ) ; return (MOD - MOD / a) * inv(MOD % a); } 2.线性筛法 bool isPrime[MAXN]; int l ...

  8. 模板 - 数学 - 数论 - 扩展Euler定理

    费马(Fermat)小定理 当 \(p\) 为质数,则 \(a^{p-1}\equiv 1 \mod p\) 反之,费马小定理的逆定理不成立,这样的数叫做伪质数,最小的伪质数是341. 欧拉(Eule ...

  9. 模板 - 数学 - 数论 - Miller-Rabin算法

    使用Fermat小定理(Fermat's little theorem)的原理进行测试,不满足 \(2^{n-1}\;\mod\;n\;=\;1\) 的n一定不是质数:如果满足的话则多半是质数,满足上 ...

随机推荐

  1. 老曹眼中的Linux基础

    Linux 几乎无处不在,不论是服务器构建,还是客户端开发,对操作系统的基本理解和基础技能的掌握对全栈来说都是必备的. 系统的选择 Linux发行版本大体分为两类,一类是商业公司维护的发行版本,一类是 ...

  2. php session存入redis

    php的会话默认以文件的形式存在,可以配知道NOSQL中,既可以提高访问速度又能好好的实现回话共享,在后期做负载均衡时实现多台服务器session 同步也是比较方便: 一:在php配置文件中改 修改p ...

  3. Ruby 基础教程 1-2

    1.数组 创建 arrayname=[] arrayname=["1",12,"23"] 访问 arrayname[index] 更新 arrayname[in ...

  4. 编译chromium时下载gn.exe时出错的解决方案

    天朝人写个代码真难,想要编译一下chromium,但是获取代码时各种坑,不是网速慢,就是网络联不通,真难玩. 本文针对下载gn.exe等工具时失败的解决方案. 原因1:gclient没有走代理,针对使 ...

  5. 180710-MySql插入唯一键冲突的三种可选方式

    MySql插入时唯一键冲突的几种处理方式 MySql插入一条记录,结果提示主键冲突,怎么办? 批量插入数据时,发现插入的这批数据中,有某些记录存在唯一键冲突,一个一个跳出来就比较麻烦了,有什么好的办法 ...

  6. Python学习-猜数字游戏

    菩萨蛮·黄鹤楼 茫茫九派流中国,沉沉一线穿南北.烟雨莽苍苍,龟蛇锁大江. 黄鹤知何去,剩有游人处.把酒酹滔滔,心潮逐浪高! --coding:UTF-8-- import random secret ...

  7. 单词 (Play on Words UVA - 10129 )

    题目描述: 原题:https://vjudge.net/problem/UVA-10129 题目思路: 1.明显是判断欧拉路径 2.欧拉路径的两个条件 a.图连通 b.至多为两个奇点,且一个为起点一个 ...

  8. 4. hadoop启动脚本分析

    4. hadoop启动脚本分析 1. hadoop的端口 ``` 50070 //namenode http port 50075 //datanode http port 50090 //2name ...

  9. JavaScript筑基篇(三)->JS原型和原型链的理解

    删除理由:很久以前写的,当时理解不够深入,这样描述反而看起来更复杂了.因此就删掉,免得误人子弟! 可以看看另一篇文章:[如何继承Date对象?由一道题彻底弄懂JS继承.](http://www.cnb ...

  10. 2017-2018-2 20172323 『Java程序设计』课程 结对编程练习_四则运算 2

    相关过程截图 关键代码解释 将运算式分开的代码 String[] result = num.split("\\s"); 将输入的num以空格为间隔符号分开,将每一个间隔开的字符存入 ...