求解模线性方程定理

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Part 3
快速幂
快速幂
1.模算术 在ACM里,很多时候只是想考察一下各位对算法的理解能力 ,但是有些考察方法会导致结果超级大,为了避开大数,很 多时候会要求对结果mod一个大素数。
模算术在加法和乘法下和平时的运算是一样的,只需要在运 算后面取mod.
(a+b)%mod=a%mod+b%mod (a*b)%mod =a%mod*b%mod… 对于减法也是满足的 (a-b)%mod=a%mod-b%mod.
4. 如何求出1~n里所有的约数? 如果对于每个数做一次判断素数,那么n个数的复杂度会达 到n*sqrt(n)=n^1.5.
基于上面判断素数的思想,如果我们用1~sqrt(n)里的数,把 这些数的倍数(在1~n范围里的)全部筛掉,那么剩下的数 不就都是素数了吗?
素数筛
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
4. 矩阵快速幂 对于一个矩阵A^n,也是可以利用相似的方法的求矩阵的n次 方,对于一个k维矩阵的n次方,复杂度是O(k^3logn),下面给 个伪代码。
快速幂
Part 5
模算术与逆元
逆元
1.什么是逆元? 在模算术里,乘法加法都可以像自然的运算一样进行,但是 除法是不行的。
(24/4)%7=6 (24%7)/(4%7)=3/4…
Part 2
gcd
gcd
1.什么是gcd? 就是两个数的最大公约数。 Gcd(3,5)=1 gcd(4,6)=2, gcd(30,45)=15…
gcd
2.怎么求两个数的gcd? 辗转相除法,由于该算法是比较基础的,下面直接给 出该算法 gcd(a,b)=gcd(b,a%b). 即a,b的gcd等价于b,a%b的gcd
因为原本可以整除的数在取模后不再可以被整除,这里就会 出现错误。 为了实现除法,我们希望能够找到 /4的一个等价的东东,这 个东西就是逆元,4的逆元是2,/4等价于*2. 所以24/4%7 = 24*2 %7 =6.
逆元
2.逆元的定义 在模数为x的模运算下,a的逆元a’是满足 aa’=1 (mod x)
gcd
gcd(a,b)=gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设gcd(a,b)=d 那么由于r = a-kb d|a 且 d | kb 所以 d | r 所以 d|b d|(a mod b) 因而有 Gcd(a,b)=gcd(b,a%b) http://blog.csdn.net/dellaserss/article/details/8244059
快速幂
2.求a^n mod 10^9+7
a^27?
27=(11011) (二进制下1+2+8+16)
a^27=a^1*a^2*a^8*a^16… 我们只需要求出a^1 a^2 a^4 a^8 a^16… 然后根据二进制表示把这些数乘起来就好。
快速幂
快速幂
3.复杂度 取决于n的二进制有多少位,所以复杂度为O(logn).
t/a = t/a * 1 = t/a *aa’ = t*a’
所以除以一个数等于乘上这个数的逆元。
至此我们了解了模运算下的加减乘除。
逆元
3.怎么求逆元? 逆元在根据模数不同(模的是一个素数还是非素数),以及 时间上的需要(是在线算还是离线算?)会有不同的求法, 下面介绍一种基于快速幂的在模的是素数下的逆元算法。
gcd
Part 3
素数筛
素数筛
1.什么是素数?(大家都知道的了吧?,我想就不用介绍啦 )
2.怎么判断一个数是素数? 如果一个数n它不是素数,它必然存在一个约数是小于 sqrt(n)的。
如果对于所有sqrt(n)下的数,它都不能整除,那么它就是一 个素数。
素数筛
3. 求出一个数n的所有约数。 从上面我们可以知道,求一个数的约数不需要枚举1~n,只 需要枚举1~sqrt(n)。这是最常用的一个求约数的方法。
03 快速幂
04 模算术与逆元 05 组合数 06 Advanced topic
Part 1
ACM中的数论
ACM中的数论
ACM 中常有用数论作为背景的题,还有一些常用数论 作为解题工具的情况比较多。像gcd就是经常用来设计 各种题,像其中与模算术相关的则大多会用到计数。 今天主要给大家介绍一下这些基础知识。
Байду номын сангаас
素数筛
素数筛
5.复杂度分析 考虑到每层循环执行的次数是n/i. n/1+n/2+n/3+n/4+… N*(1+1/2+1/3+1/4+1/5+…)=O(nlogn).
实际上我们只用到了(1/2+1/3+1/5+1/7…) 小于sqrt(n)的素数的倒数和,查阅资料其复杂度是 O(log(logn))。 所以总体的复杂度大概是O(nlog(logn)).
Lecture 7 Number Theory
Chuhua Xian chhxian@scut.edu.cn
School of Computer Science and Engineering, South China University of Technology
目 Contents 录
01 gcd 02 素数筛
相关文档
最新文档