黑马程序员技术交流社区

标题: 最大公约数 学解释 [打印本页]

作者: 爱hao者    时间: 2015-12-18 16:10
标题: 最大公约数 学解释

static public int gcd1_1(int x, int y)   
{
  int temp;
  
  do{
  temp = x % y;
  x = y;
  y = temp;
  }while(temp != 0);
  
  return x;
}
作者: ash午夜阳光    时间: 2015-12-18 21:03
辗转相除法
作者: 洪志豪1994    时间: 2015-12-19 21:53
表示不懂~~~
作者: sorryjsy    时间: 2015-12-20 10:23

  1. public class Test {

  2.         /**
  3.          * 最大公约数
  4.          */
  5.         public static int gcd1_1(int x, int y) {
  6.                 int temp;

  7.                 do {
  8.                         temp = x % y;
  9.                         x = y;
  10.                         y = temp;
  11.                 } while (temp != 0);

  12.                 return x;
  13.         }

  14.         /**
  15.          * 上面方法也可以写成下面这种写法
  16.          */
  17.         public static int gcd(int x, int y) {
  18.                 if (x % y == 0) {
  19.                         return y;
  20.                 } else {
  21.                         return gcd(y, x % y);
  22.                 }

  23.         }

  24. }

  25. /**
  26. * 分析gcd1_1方法
  27. * 我们先假设x和y的最大公约数为T
  28. *
  29. * 情况1.如果x<y do代码块相当于把x和y的值互换,然后转到下面的情况2:
  30. *
  31. * 情况2.如果x>=y,只会有下面两种情况:
  32. *  ->>2.1 如果x和y的最大公约数T== y的话
  33. *   那么 x%y=0;返回y即可
  34. *   
  35. *  ->>2.2 如果x和y的最大公约数T<y的话 那么x = mT,y=nT (并且m>n)
  36. *      那么x%y=temp,此时temp一定也是T的整数倍,假设temp=qT,则q一定小于n。此时temp和y的公约数也即是所求的公约数。
  37. *      如此递归进行2.2步骤,则最终q会越来越小,直至q==1的时候,x%y==0,则此时y的值即为所求最大公约数。
  38. *
  39. *
  40. *
  41. */
复制代码







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2