zoukankan      html  css  js  c++  java
  • 求最大公约数伪代码

    1. 上网查找什么是求两个数的最大公约数的欧几里得算法(辗转相除法),提交算法说明和网上链接。
      辗转相除法又叫欧几里得算法,是欧几里得最先提出来的.辗转相除法的实现,是基于下面的原理(在这里用(a,b)表示a和b的最大公因数):
        (a,b)=(a,ka+b),其中a、b、k都为自然数.………………①
        也就是说,两个数的最大公约数,将其中一个数加到另一个数上,得到的新数,其公约数不变,比如(4,6)=(4+6,6)=(4,6+2×4)=2.要证明这个原理很容易:如果p是a和ka+b的公约数,p整除a,也能整除ka+b.那么就必定要整除b,所以p又是a和b的公约数,从而证明他们的最大公约数也是相等的.
        基于上面的原理,就能实现我们的迭代相减法:
        (78,14)=(64,14)=(50,14)=(36,14)=(22,14)=(8,14)=(8,6)=(2,6)=(2,4)=(2,2)=(0,2)=2
        基本上思路就是大数减去小数,一直减到能算出来为止,在作为练习的时候,往往进行到某一步就已经可以看出得值.迭代相减法简单,不过步数比较多,实际上我们可以看到,在上面的过程中,由(78,14)到(8,14)完全可以一步到位,因为(78,14)=(14×5+8,14)=(8,14),由此就诞生出我们的辗转相除法.
        用辗转相除法求(a,b).设r0=b,r1=a,反复运用除法算式,得到一系列整数qi,ri和下面的方程:
        相当于每一步都运用原理①把数字进行缩小,上面右边就是每一步对应的缩小结果,可以看出,最后的余数rn就是a和b的公约数.迭代相减法和辗转相除法在本质上是一样的,相对来说,减法比较简单(需要10步),但是除法步数少(仅需4步)

    参考网址:https://blog.csdn.net/qq_41575507/article/details/90752742?

    1. 参考教材,用伪代码(英语或汉语)实现欧几里得算法(辗转相除法),提交伪代码。
      num1 = int(input("请输入第一个数字:"))
      num2 = int(input("请输入第一个数字:"))
      m = max(num1, num2)
      n = min(num1, num2)
      r = m % n
      while r != 0:
      m = n
      n = r
      r = m % n
      print(num1, "和", num2, "的最大公约数为", n)

    2. 选择几组数据,手动走一下伪代码,测试你写的伪代码是否正确,提交测试过程截图。
      选择数组:200,100 30,7 64,1024 测试结果如图


  • 相关阅读:
    [转]面向接口编程详解(二)——编程实例
    [转]面向接口编程详解(一)——思想基础
    [转] LINQ to SQL快速上手 step by step
    Java备份MySQl数据库,并备份图片数据
    用密码密码拦截
    引用 MySQL集群:主从数据库配置 实现查询负载
    Oracle 对表操作 提示:资源正忙,要求指定nowait
    Jquery一款非好的图片轮换效果
    CodeBlocks集成ObjectiveC开发 Windows下学习ObjectiveC
    查询指定库中所有表
  • 原文地址:https://www.cnblogs.com/charliecza/p/13945646.html
Copyright © 2011-2022 走看看