第八周训练总结(一)

来源:互联网 发布:html5游戏前景知乎 编辑:程序博客网 时间:2024/05/02 02:16

        这周开始新的内容了,我选的是数论的内容。

        数论的部分内容在专业课学习过,原以为理解起来会比较容易,还是自己想的太简单,学的知识还是太浅。比如整除的规律这部分,之前只学习过被0、1、2、3、5整除的情况,这次的课件上扩展到了两位数甚至三位数,看完之后一时还接受不了,然后经常打开手机看看,才记了差不多。到后面的模线性方程,也被卡住了,慢慢地了解了它的解题步骤:

1)求 d=gcd(a,m)

2)若d不是b的因数,则ax≡b(mod m)无解,结束;否则转(3)

3)求x0,y0,是a*x0+m*y0=d;

4)由于d是b的因数,将a*x0+m*y0=d改写,得a(x0*(b/d))+m*(y0*(b/d))=b, 

     于是ax+my=b的一个特解为 x=x0*(b/d),y=y0*(b/d);

5)x0*(b/d)是ax≡(mod m)的一个特解,由此的ax≡b(mod m)的所有解

后面可以再扩展到模线性方程组,最典型的例子就是韩信点兵:为了计算的是士兵的人数,那么我们设这个人数为x。三人成排,五人成排,七人成排,即x mod 3, x mod 5, x mod 7。也就是说我们可以列出一组方程: 
x mod 3 = 2 
x mod 5 = 4 
x mod 7 = 6

将这个方程组推广到一般形式:给定了n组除数m[i]和余数r[i],通过这n组(m[i],r[i])求解一个x,使得x mod m[i] = r[i] 这就是模线性方程组

可以先从n=2开始递推: 
已知:

x mod m[1] = r[1] x mod m[2] = r[2]

根据这两个式子,存在两个整数k[1],k[2]:

x = m[1] * k[1] + r[1] x = m[2] * k[2] + r[2]

由于两个值相等,因此有:

m[1] * k[1] + r[1] = m[2] * k[2] + r[2] => m[1] * k[1] - m[2] * k[2] = r[2] - r[1]

由于m[1],m[2],r[1],r[2]都是常数,若令A=m[1],B=m[2],C=r[2]-r[1],x=k[1],y=k[2],则上式变为:Ax + By = C。 
这就转换成扩展的欧几里得算法

没想到看数论的课件看的这么慢,很多东西看之前想的很容易,以为自己接触过,很容易就接受,看完后才知道自己多么无知,学到的都是皮毛。现在真的开始觉得ACM的学习也可以促进专业课的学习和理解,自己开始想看了,不是被动的去看。

 

 

原创粉丝点击