A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

爱hao者

中级黑马

  • 黑马币:-80

  • 帖子:81

  • 精华:0

© 爱hao者 中级黑马   /  2015-12-18 16:10  /  469 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


static public int gcd1_1(int x, int y)   
{
  int temp;
  
  do{
  temp = x % y;
  x = y;
  y = temp;
  }while(temp != 0);
  
  return x;
}

3 个回复

倒序浏览
辗转相除法
回复 使用道具 举报
表示不懂~~~
回复 使用道具 举报

  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. */
复制代码


回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马