Java求最大公约数(带算法详细解释)

落日映苍穹つ 2021-11-08 16:10 376阅读 0赞

Java求最大公约数-带算法证明

      • 关键代码
      • 证明:两个数的最大公约数 等于 两个数的余数和小的整数的 最大公约数
      • 结论

关键代码

  1. /**
  2. * 其中a > b
  3. * @param a
  4. * @param b
  5. * @return
  6. */
  7. public static int maxDivisor(int a, int b){
  8. int n = a;
  9. int m = b;
  10. int r = 0;
  11. while(m!=0){
  12. r = n%m;
  13. n = m;
  14. m = r;
  15. }
  16. return n;
  17. }

证明:两个数的最大公约数 等于 两个数的余数和小的整数的 最大公约数

假设a、b的最大公约数为d(a > b),其中a % b = r(r > 0),求证b、r的最大公约数也是d
证明过程
因为a、b的最大公约数为d,故a = xd、b = yd;
因为a % b = r,故a = zb + r,故a = yzd + r = xd,故r = (x - yz)d,即r整除d;
故d时b、r的约数。下面证明约数的范围。

假设b、r有约数g,则 b = ng、r = mg,则a = zng + mg = (zn + m)g,则g也是a、b的约数;
由于a、b的最大公约数为d,故g <= d,所以b、r最大公约数为d

结论

代码中m==0时,可以知道前一个循环中n % m = 0,即可以整除了,m 是 此循环中m、n的最大公约数,也是最初的m、n的最大公约数

发表评论

表情:
评论列表 (有 0 条评论,376人围观)

还没有评论,来说两句吧...

相关阅读

    相关 算法-公约数

    摘要:主要用到了辗转相除法(欧几里得算法),更相减损术。 题目:求出两个整数的最大公约数。 方法一: 暴力枚举的方法,试图寻找到一个合适的整数 i,看

    相关 算法-公约数

    最大公约数是一个很经典的数学问题,对于这个问题有四种通用的解法,质因数分解法,短除法,不过比较常用的还是辗转相除法,算法出自于欧几里的著作《几何原本》,还有一个就是出自《九章算

    相关 公约数

    求最大公约数 \\一.题目内容 \\运行最大公约数的常用算法,并进行程序的调式与测试,要求程序设计风格良好,并添加异常处理模块。 \\二.算法设计 \\四种函