永发信息网

辗转相除法求最大公约数java

答案:5  悬赏:60  手机版
解决时间 2021-04-02 17:49
  • 提问者网友:喧嚣尘世
  • 2021-04-02 06:19
辗转相除法求最大公约数java
最佳答案
  • 五星知识达人网友:行路难
  • 2021-04-02 07:57
辗转相除法,是求两个正整数之最大公因子的算法。
辗转相除法的算法过程如下:设两数为a、b(a>b),求a和b最大公约数(a,b)的步骤如下:用a除以b,得
a÷b=q,余数r1(0≤r1)。若r1=0,则(a,b)=b;若r1不等于0,则再用b除以r1,得b÷r1=q,余数r2
(0≤r2).若r2=0,则(a,b)=r1,若r2不等于0,则继续用r1除以r2,如此下去,直到能整除为止,其最后一个为被除数的余数的除数即为
(a, b)。
具体事例代码如下:

public class Demo2 {
public static void main(String[] args) {
int a = 49,b = 91;
while(b != 0) {
int yushu = a % b; //记录余数
a = b; //将b值赋给a值
b = yushu; //将余数赋给b值
}
System.out.println(a);
}
}
辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
全部回答
  • 1楼网友:荒野風
  • 2021-04-02 10:57
作用域有点问题
r是在do内定义的,括号结束后它的作用域也结束了
do附近改下:
int n2 = m1+m2-n1;
int r = n1/n2;
do {
r = n1/n2;
n1 = n2;
再试下看可以不
PS:我没有看逻辑
  • 2楼网友:怀裏藏嬌
  • 2021-04-02 10:33
比较好用的是辗转相除法。
比如:49和91
a b temp
49 % 91 = 49
91 % 49 = 42
49 % 42 = 7
42 % 7 = 0
所以最大公约数就是7.
public class T {
public static void main(String[] args) {
int gcd = gcd(91, 49);
System.out.println(gcd);
}

public static int gcd(int a, int b) {
while(b != 0) {
int temp = a%b;
a = b;
b = temp;
}
return a;
}
}
  • 3楼网友:往事隔山水
  • 2021-04-02 09:09
do...while中的括号r!=0为什么“r cant be rosolved建议用辗转相除法。
列子比如:49和91
a b temp
49 % 91 = 49
91 % 49 = 42
49 % 42 = 7
42 % 7 = 0
所以最大公约数就是7.
public class T {
public static void main(String[] args) {
int gcd = gcd(91, 49);
System.out.println(gcd);
}


public static int gcd(int a, int b) {
while(b != 0) {
int temp = a%b;
a = b;
b = temp;
}
return a;
}

}
  • 4楼网友:煞尾
  • 2021-04-02 08:31
int m1 = Integer.parseInt(s1);
int m2 = Integer.parseInt(s2);
int n1 = m1>m2 ? m1:m2;
int n2 = m1+m2-n1;
do {
int r = n1/n2;
n1 = n2;
n2 = r;
} while (r!=0);
----
int m1 = Integer.parseInt(s1);
int m2 = Integer.parseInt(s2);
int r = 0;
while(m2!=0)
{
r=m1%m2;
m1=m2;
m2=r;
}
上面换未下面那个就好了,JOptionPane.showMessageDialog这里的自己改吧~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯