收藏 分享(赏)

数论知识.ppt

上传人:天天快乐 文档编号:573058 上传时间:2018-04-12 格式:PPT 页数:68 大小:364KB
下载 相关 举报
数论知识.ppt_第1页
第1页 / 共68页
数论知识.ppt_第2页
第2页 / 共68页
数论知识.ppt_第3页
第3页 / 共68页
数论知识.ppt_第4页
第4页 / 共68页
数论知识.ppt_第5页
第5页 / 共68页
点击查看更多>>
资源描述

1、长沙市雅礼中学 朱全民,数论,知识点,素数与合数质因素的分解最大公约数与最小公倍数整除与同余同余方程与同余方程组欧几里德算法、扩展欧几里德算法、中国剩余定理欧拉定理与费马小定理,思考题1:素数密度,问题描述给定区间L, R(L = R = 2147483647,R-L = 1000000),请计算区间中素数的个数。输入数据两个数L和R。输出数据一行,区间中素数的个数。,梅森素数,把形如(2p-1)形式的素数称为梅森素数,p是素数。1, 231-1之间的梅森素数有:22-1, 23-1, 25-1, 27-1, 213-1, 217-1, 219-1, 231-1梅森素数的一个性质:一个正整数n

2、的所有约数和是2的幂当且仅当n能够被分解为若干个不同的梅森素数之积。,思考题2:fibonacci数列,已知f1=1,f2=1fn=fn-1+fn-2给出n,如何快速求fibonacci数列的fn,分析,普通的算法求Fn的时间复杂度为O(n),当然如果要求求出所有的Fn,这种已经是最优的了,但是如果只求某一个Fn,可以改进,F(n)=(1/5)*(1+5)/2n - (1-5)/2n,唯一因子分解,唯一质因子分解定理:合数a仅能以一种方式,写成如下的乘积形式:a=p1e1p2e2prer其中pi为素数,p1p2d,我 们可以令a=(c+d)/2,b=(c-d)/2,那么的可以得到N=a*a-b

3、*b,而这正是Fermat整数分解的基础;由不等式的关系,我们又可以 得到a=sqrt(c*d)=sqrt(N),那么,我们就可以枚举大于N的完全平方数a*a,计算a*a-N的值,判断计算的结果是否为一个完 全平方数,如果是,那么a,b都是N的因子,我们就可以将算法递归的进行下去,知道求出N的所有质因子。,Pollard rho算法,Pollard rho算法的原理就是通过某种方法得到两个整数a和b,而待分解的大整数为n,计算p=gcd(a-b,n),直到p不为1,或者a,b出现循环为止。然后再判断p是否为n,如果p=n成立,那么返回n是一个质数,否则返回p是n的一个因子,那么我们又可以递归的

4、计算Pollard(p)和Pollard(n/p),这样,我们就可以求出n的所有质因子。具体操作中,我们通常使用函数x2=x1*x1+c来计算逐步迭代计算a和b的值,实践中,通常取c为1,即b=a*a+1,在下一次计算中,将b的值赋给a,再次使用上式来计算新的b的值,当a,b出现循环时,即可退出进行判断。在实际计算中,a和b的值最终肯定一出现一个循环,而将这些值用光滑的曲线连接起来的话,可以近似的看成是一个型的。对于Pollard rho,它可以在O(sqrt(p)的时间复杂度内找到n的一个小因子p,可见效率还是可以的,但是对于一个因子很少、因子值很大的大整数n来说,Pollard rho算法

5、的效率仍然不是很好,那么,我们还得寻找更加的方法了。,思考题3:除法表达式,除法表达式有如下的形式:X1 / X2 / X3 / / Xk其中Xi是正整数且Xi109 (1ik,k10 000)。除法表达式应当按照从左到右的顺序求和,例如表达式1/2/1/2的值为1/4。可以在表达式中嵌入括号以改变计算顺序,例如表达式(1 / 2) / (1 / 2)的值为1。现在给一个除法表达式E要求告诉是否可以通过增加括号使表达式值为E,E是整数。,14,同余,设m0,若mab,即abkm,则称a同余于b模m,记为a、b关于模m同余的充要条件是整数a和b被同一正整数m除时,有相同的余数。,同余的性质,同余

6、的性质,若m1,(a,m)1,则存在c使得 ca1(mod m)我们把c称为是a对模m的逆,记为 a1(mod m)或a1可以用扩展欧几里德算法求a1,例:求3406写成十进位数时的个位数.,根据题意是要求a满足3406 a(mod 10)显然32 9 1 (mod 10),34 1 (mod 10),从而3404 1 (mod 10),因此3406 3404 32 9(mod 10)所以个位数是9.,思考题4:Hankson 的趣味题(noip2009),X和a0的最大公约数为a1X和b0的最小公倍数为b1给出a0,a1,b0,b1,求满足上述条件的x的个数?,根据整数模n所得的余数,可以把

7、整数分成n个等价类:0,1,n-1。包含整数的模n等价类为:an=a+kn| kZ,模运算,有限群:群(S, +)是一个集合S和定义在S上的二元运算+,它满足如下性质:封闭性:如果a, bS,那么a+b S。单位元:存在一个元素e,使得对于所有的aS都满足e+a=a+e=a。结合律:对于任意的a, b, c都满足(a+b)+c=a+(b+c)。逆元:对每个aS都存在唯一的元素bS使得a+b=b+a=e。把b称作a的逆元。,21,模运算,根据模加法和模乘法定义的群:定义在集合Zn0,1,2,n-1上集合上的加法和乘法运算定义为:an +n bn = a+bnan *n bn = a*bn,思考题

8、5:同余方程(NOIP2012),【问题描述】求关于x的同余方程ax 1 (modb)的最小正整数解。【输入】输入文件为mod.in。输入只有一行,包含两个正整数a, b,用一个空格隔开。【输出】输出文件为mod.out。输出只有一行,包含一个正整数x0,即最小正整数解。输入数据保证一定有解。【数据范围】对于40%的数据,2 b1,000;对于60%的数据,2 b50,000,000;对于100%的数据,2 a, b2,000,000,000,定理:方程ax=b(mod n)对于未知量x有解,当且仅当gcd(a,n) | b。 推论2:方程ax=b(mod n)或者对模n有d个不同的解,其中d

9、=gcd(a,n),或者无解。,理论,24,Extended-Euclidean 算法,对于gcd(a,b) = d,对(a, b)用欧几里德辗转相除会最终得到(d, 0)。此时对于把a =d, b = 0 代入a*x + b*y = d,显然x = 1,y可以为任意值。我们可以用a = d, b = 0的情况逆推出来任何gcd(a, b) = d 满足a*x + b*y = d的解。如果x0,y0是b*x + (a%b)*y = d 的解,那么对于a*x + b*y = d的解呢?,25,Extended-Euclidean 算法,b*x + (a%b)*y = d b*x + (a - a

10、/b*b)*y = a*y + b*(x - a/b*y),所以a*x + b*y = d的解 x1 = y0, y1= x0 - a/b*y0;这样我们可以程序迭代了。,注:a,b为正整数,设集合A = x*a+y*b|x,y是整数,则A中最小正元素是gcd(a,b),Euclidean算法,int gcd(int a, int b) int r; r=a%b; if(r=0) return b; else return gcd(b,r); 该算法又叫辗转相除法,Extended-Euclidean 算法,int exGcd(int a, int b, int ,相关定理,定理1: 设d=g

11、cd(a,n),假定对整数x和y满足d=ax+by(比如用扩展Euclid算法求出的一组解)。如果d | b,则方程ax=b(mod n)有一个解x0满足 x0=x*(b/d) mod n 。特别的设e=x0+n,方程ax=b(mod n)的最小整数解x1=e mod (n/d),最大整数解x2=x1+(d-1)*(n/d)。 定理2:假设方程ax=b(mod n)有解,且x0是方程的任意一个解,则该方程对模n恰有d个不同的解(d=gcd(a,n),分别为:xi=x0+i*(n/d) mod n 。,两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬

12、度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。,思考题6:青蛙的约会(POJ 1061),我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐

13、标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。输入只包括一行5个整数x,y,m,n,L,其中xy 2000000000,0 m、n 2000000000,0 L 2100000000。输出碰面所需要的跳跃次数,如果永远不可能碰面则输出一行Impossible,Input 输入只包括一行5个整数x,y,m,n,L,其中xy 2000000000,0 m、n 2000000000,0 L 60,所以,274604=34,就是所求的数。,思考题7:荒岛野人(NOI2002),克里特岛以野人群居而著称。岛上有排列成

14、环行的M个山洞,顺时针编号为1,2, M岛上住着N个野人一开始依次住在山洞C1,C2, CN中以后每年,第i个野人会沿顺时针向前走Pi个洞住下来每个野人i有一个寿命值Li,即生存的年数。至少有多少个山洞才能让任何两个野人在有生之年都不可能处在同一个山洞中,【输入文件】第1行为一个整数N(1=N=15),即野人的数目。第2行到第N+1每行为三个整数Ci, Pi, Li (1=Ci,Pi=100, 0=Li=106 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值。【输出文件】仅包含一个数M,即最少可能的山洞数。输入数据保证有解,且M不大于106。,样例,下面四幅图描述了一个有6个山洞

15、,住有三个野人的岛上前四年的情况。三个野人初始的洞穴编号依次为1,2,3;每年要走过的洞穴数依次为3,7,2;寿命值依次为4,3,1。,解题思路,用Ci, Pi, Li (1=Ci,Pi=100, 0=Li=106 ),表示每个野人所住的初始洞穴编号,每年走过的洞穴数及寿命值,则有如果两个野人相遇, 则 ci+pi*x=cj+pj*x(mod m)所以转化为(pi-pj)*x=(cj-ci)(mod m)利用扩展欧几里得,可以判断模线性方程是否有解。,欧拉函数,Euler函数 :设m是正整数,1,2,m中与m互素的数的个数。此函数以其首名研究者欧拉命名,它又称为函数、欧拉商数等。例如,因为1,

16、3,5,7均和8互质。 定理:,费马小定理,假如a是一个整数,p是一个素数,那么 ap a (mod p)。如果a不是p的倍数,这个定理也可以写成ap-1 1 (mod p)。-这个更加常用,欧拉定理,若m,a为正整数,且m,a互素,(gcd(a,m) = 1),则a(m)1,其中为(m)欧拉函数,mod m为同余关系。欧拉定理实际上是费马小定理的推广。比如计算7222的个位数,实际是求7222 mod 10。 7和10互素,且(10)=4,。由欧拉定理知741 (mod 10)。所以 7222 =74*55+2=(74)55 *72 155 *72 49 9 (mod 10),原根,原根的定

17、义:原根Primitive Root。设m是正整数,a是整数,若a模m的阶等于(m),则称a为模m的一个原根。(其中(m)表示m的欧拉函数)假设一个数g对于P来说是原根,那么gi mod P的结果两两不同,且有 1gP, 0iP,那么g可以称为是P的一个原根,归根到底就是gP-1 = 1 (mod P)当且仅当指数为P-1的时候成立.(这里P是素数).简单来说, gi mod p gj mod p (p为素数)其中ij且i, j介於1至(p-1)之间则g为p的原根。求原根目前的做法只能是从2开始枚举,然后暴力判断 gP-1 = 1 (mod P)是否当且当指数为P-1的时候成立而由于原根一般都

18、不大,所以可以暴力得到.,原根的性质,1)可以证明,如果正整数(a,m) = 1和正整数 d 满足ad1(mod 7),则 d 整除 (m)。因此 Ordm(a)整除(m)。在例子中,当a= 3时,我们仅需要验证 3 的 1 、2、3 和 6 次方模 7 的余数即可。2)记 = Ordm(a),则a1,a(-1)模 m 两两不同余。因此当a是模m的原根时,a0,a1,a(-1)构成模 m 的简化剩余系。3)模m有原根的充要条件是m= 1,2,4,p,2p,pn,其中p是奇质数,n是任意正整数。4)对正整数(a,m) = 1,如果 a 是模 m 的原根,那么 a 是整数模n乘法群(即加法群 Z/

19、mZ的可逆元,也就是所有与 m 互素的正整数构成的等价类构成的乘法群)Zn的一个生成元。由于Zn有 (m)个元素,而它的生成元的个数就是它的可逆元个数,即 (m)个,因此当模m有原根时,它有(m)个原根。,原根的例子,设m= 7,则()等于6。设a= 2,由于23=81(mod 7),而36,所以 2 不是模 7 的一个原根。设a= 3,由于313(mod 7),322(mod 7),336(mod 7),344(mod 7),355(mod 7),361(mod 7),所以 3 是模 7 的一个原根。,Miller-Rabin测试,对于奇数n, 记n=2r*s+1, 其中s为奇数随机选a(1

20、=a=n-1), n通过测试的条件是as1(mod n), 或者存在0=j=r-1使得a2j*s-1(mod n)素数对于所有a通过测试, 合数通过测试的概率不超过1/4只测试a=2, 3, 5, 7, 则2.5*1013以内唯一一个可以通过所有测试的数为3215031751,思考题8: Distance (POI19),Description对于两个正整数a、b,这样定义函数d(a,b):每次操作可以选择一个质数p,将a变成a*p或a/p,如果选择变成a/p就要保证p是a的约数,d(a,b)表示将a变成b所需的最少操作次数。例如d(69,42)=3。现在给出n个正整数A1,A2,.,An,对

21、于每个i (1=i=n),求最小的j(1=j=n)使得ij且d(Ai,Aj)最小。Input第一行一个正整数n (2=n=100,000)。第二行n个正整数A1,A2,.,An (Ai=1,000,000)。Output输出n行,依次表示答案。,分析,题意:给定n个数,对于每个数求离其距离最小的数的标号,每两个数的距离是指a*b/gcd(a,b)的质因数的个数,相同质因数是算多次的,比如说4就是2,24就是4。很显然看数据范围是O(nlogn)的,那么考虑一下有哪些算法是这个时间复杂度一下的就可以了。,分析,首先O(nlogn)处理出每个数的质因数个数。然后枚举gcd,处理出这个数的所有倍数。

22、那么暂且将这个数作为gcd来做(如果它不是这两个数的gcd,肯定不会不答案优的)。在其倍数中选出质因数个数最小的,那么对于其每个倍数,答案就是其质因数的个数+最小的那个的质因数个数-2*gcd的质因数的个数。当然得注意一下自己不能和自己搞的,用其更新答案就可以了。,思考题9:能量采集( NOI2010 ),题意:平面上有n*m个整点,坐标为(x, y),1xn,1ym。若(x, y)与(0,0)的连线上有k个整点,则(x, y)损失2k+1。问总共的损失是多少。数据范围对于10%的数据:1 n, m 10;对于50%的数据:1 n, m 100;对于80%的数据:1 n, m 1000;对于9

23、0%的数据:1 n, m 10,000;对于100%的数据:1 n, m 100,000。,分析,依次枚举所有可能的坐标(x, y),计算(x, y)与(0, 0)的连续上有多少个整点即可。设g为x和y的最大公约数,不难证明,所以(x, y)与(0, 0)的连线上的点的坐标都是(kx/g, ky/g)的形式,其中k是整数,所以不难得出连线上的整点个数为g-1个。选手只要枚举x, y,使用欧几里得算法计算x和y的最大公约数g,即可计算出答案,该算法的复杂度为O(n2logn),可以得到80%的分数。,分析,枚举gcd,(n/gcd)*(m/gcd)就是最大公约数是gcd的倍数的数的个数,记为cn

24、tgcd。从大到小枚举gcd,然后用cntgcd减去所有最大公约数是gcd的倍数的数,即为最大公约数为gcd的数的个数。复杂度为1/n+2/n+.n/n=nlogn。,思考题10: Discrete Logging (poj2417),DescriptionGiven a prime P, 2 = P 231, an integer B, 2 = B P, and an integer N, 1 = N =0&im),计算出b*(a-m) i %p的值,每计算出一个值就去上面已经得出的二元组里面查找有无相等的值,若有相等的值,就表示已经找到了x,此时x=i*m+j。若枚举完i后,无相等值就表示

25、无x成立。,思考题10: Discrete Roots( sgu261),http:/acm.sgu.ru/problem.php?contest=0&problem=261题意:给定数P,K,A,求x,使得xK=A mod P。数据范围:2 = P = 109 2 = K = 1000000 = A P所有的解在0.p-1范围内,分析,我们可以求出p的一个原根r,那么r1,r2.rphi(p)构成模p的完全剩余系。故可设x=ri ,a=rj,由 xk=a (mod p),那么等式化成 r (i*k)=rj (mod p)那么由定理可得 i*k=j (mod p-1)由rj =a mod p

26、可由离散对数求得j 由i*k=j mod p-1 可由模线性方程求得i由x= rj 求得x然后对所有x取余后排序,输出即可。,思考题11:灯泡,有n(=106)个灯排列成环形. 每个单位时间 灯i改变状态当且仅当上一个时刻它下一个灯(in时为i+1, i=n时为1)开着。给n个灯的初始状态以及m (m=0的数列个数。,思考题13:圆桌问题,设 n 对夫妻围圆桌而坐,男女相间,每个男人都不和他的妻子相邻,有多少种可能的方案?,分析,不妨设 n 个女人先围成一圈,方案数为( n1 )! 。对任一这样的给定方案,顺时针给每个女人以编号1 , 2 , , n。设第i号与第 i + 1号女人之间的位置为

27、第 i 号位置,1 i n1。第 n 号女人与第1 号之间的位置为第 n 号位置。设第 i 号女人的丈夫的编号也为第 i 号,1 i n。让 n 个男人坐到上述编号的 n 个位置上。设 ai是坐在第 i 号位置上的男人,则 ai i ,i + 1, i n1;ann,1。,分析,这样的限制也即要求在下面3行n列的排列中每列中都无相同元素。, nn n1 a1 a2 a3 an1 an,满足这样的限制的排列 a1a2 an称为二重错排。设二重错排的个数为Un,原问题所求的方案数就是Un ( n1)!。,分析,设Ai为 ai = i或 i+ 1 (1 i n-1 ),an = n或1的排列 a1

28、a2 an的集合。则Ai= 2 (n-1)! ,关键是计算 |Ai|,iI,I ( n , k),也就是从( 1 , 2 ) ( 2 , 3 ) ( n-1, n ) ( n , 1)这n对数的k 对中各取一数,且互不相同的取法的计数。这相当于从1 , 2 , 2 , 3 ,3 ,4, ,n-1, n-1, n , n , 1中取 k 个互不相邻数的组合的计数,但首尾的不能同时取。,一般公式,回想无重复不相邻组合的计数:C( n , r ) = C ( n- r + 1 , r ) ,这里所求的是:,思考题14:单色三角形,n点,无三点共线每两点有红线或蓝线有多少个三角形的三边同色?非单色三角形:两个顶点连接两个不同色线第i个点连出红线ri条,则蓝线有n-1-ri条非单色三角形有sumri(n-1-ri)/2单色呢?,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报