初等数论 (5)课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[北理07软件学院范立乾] 数论相关 欧几里德 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b  假设d是a,b的最大公约数,则有 d|a, d|b, 而r = a - kb,因此d|r  因此d是(b,a mod b)的最大公约数  假设d 是(b,a mod b)的最大公约数,则 d | b , d |r , 但是a = kb +r  因此d也是(a,b)的最大公约数 C语言程序描述: int Gcd(int a, int b)   {   if(b == 0)  return a;   return Gcd(b, a % b);   } 拓展欧几里德 扩展欧几里德算法是用来在已知a, b求解一组p,q使得p * a+q * b = Gcd(a, b) (解一定存在,根据数论中的相关定理)。   int extEuclid(int a, int b, int x,int y) { if (b==0){ x=1;y=0;return a;} int r=extEuclid(b,a%b,x,y); int t=x; x=y; y=t-a/b*y; return r; } 证明: 对于a = b, b = a % b 而言,我们求得 x, y使得 ax + by = Gcd(a, b)  由于b = a % b = a - a / b * b   那么可以得到:  ax + by = Gcd(a, b) ===  bx + (a - a / b * b)y = Gcd(a, b) = Gcd(a, b) ===   ay +b(x - a / b*y) = Gcd(a, b)   因此对于a和b而言,他们的相对应的p,q分别是 y和(x-a/b*y) 补充: 1.对于不定整数方程pa+qb=c,若 c mod Gcd(a, b)=0,则该方程存在整数解,否则不存在整数解。 2.最小的正数p为 p = (p0 % ( b/gcd) + b/gcd) % (b/gcd)(a*p+b*q=c)。 3.p = p0 + b/Gcd(a, b) * t 其中t为任意整数,相应的q通过方程就可算得。 解线性同余方程 同余:a ≡ b(mod m) == a % m = b % m a*x + b*y = n (求x最小正解)等价于 a*x ≡ n(mod b) //返回最小的x Int modularLinearEquation(int a,int b,int n) { int d,x,y; result=-1; d=extEuclid(a,n,x,y); //d为gcd(a,n) if(b%d0) return;//判断是否有解 x=x*(b/d);//计算一个解 x=(x%(n/d)+n/d)%(n/d);//计算最小正数解 result=x; } 青蛙的约会 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面。它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止。可是它们出发之前忘记了一件很重要的事情,既没有问清楚对方的特征,也没有约定见面的具体位置。不过青蛙们都是很乐观的,它们觉得只要一直朝着某个方向跳下去,总能碰到对方的。但是除非这两只青蛙在同一时间跳到同一点上,不然是永远都不可能碰面的。为了帮助这两只乐观的青蛙,你被要求写一个程序来判断这两只青蛙是否能够碰面,会在什么时候碰面。 我们把这两只青蛙分别叫做青蛙A和青蛙B,并且规定纬度线上东经0度处为原点,由东往西为正方向,单位长度1米,这样我们就得到了一条首尾相接的数轴。设青蛙A的出发点坐标是x,青蛙B的出发点坐标是y。青蛙A一次能跳m米,青蛙B一次能跳n米,两只青蛙跳一次所花费的时间相同。纬度线总长L米。现在要你求出它们跳了几次以后才会碰面。 两只青蛙跳了 t 步 A的坐标 x+mt B的坐标 y+nt 相遇的条件: x+mt-y-nt= pL ( p?Z) 即 (n-m)*t+Lp=x-y (L0) 令(n-m) = a, x-y = b, 就是求解 a*t = b(mod L) 幂次取模 //求a^b mod n,由于(x*y)%n == (x*(y%n))%n int modExp(int a, int b, int n) { int t, y; t=1;y=a; while(b!=0){ if(b%2==1) t=t*y %n; y

文档评论(0)

yingzhiguo + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5243141323000000

1亿VIP精品文档

相关文档