求两个数最大公约数的三种方法(java实现)
运行以下代码需要导入java.util.Scanner包,即在代码中加如下代码:
import java.util.Scanner;
1.相减法
两个数,相等时,最大公约数为他们其中任意一个。不相等时,用大数减小数。得到的差和之前的那个小数再次相减,直到两个数相等,这两个中,任意一个都是最大公约数。(代码如下)
int m,n; //从键盘输入m、n的值 Scanner scanner = new Scanner(System.in); m = scanner.nextInt(); n = scanner.nextInt(); //相减法 while((m-n)!=0) { if(m>n) { m = m-n; }else { n = n-m; } } //输出m或n都可以 System.out.println("最大公约数是:"+m);
2.穷举法
如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。(代码如下)
int m,n; //从键盘输入m、n的值 Scanner scanner = new Scanner(System.in); m = scanner.nextInt(); n = scanner.nextInt(); //穷举法 if(m>=n) { for(int i=n;i>=1;i--) { if((m%i)==0&&(n%i)==0) { //输出m或n都可以 System.out.println("最大公约数是:"+m); break;//找到最大公约数后跳出循环 } } }else { for(int j=m;j>=1;j++) { if((m%j)==0&&(n%j)==0) { //输出m或n都可以 System.out.println("最大公约数是:"+m); break;//找到最大公约数后跳出循环 } } }
3.辗转相除法
用大数对小数求余,若余数为0,则除数为最大公约数。若余数不为0,将此余数作为除数,小数作为被除数,重新求余,直到余数为0为止。此时的最大公约数为余数。例如:27和6. 27%6=3. 6%3=0. 所以最大公约数为3.(代码如下)
int m,n; //从键盘输入m、n的值 Scanner scanner = new Scanner(System.in); m = scanner.nextInt(); n = scanner.nextInt(); //辗转相除法 if(m>=n) { int x = m%n; while(x!=0) { m=n; n=x; x=m%n; } //输出m或n都可以 System.out.println("最大公约数是:"+m); }else { int y = n%m; while(y!=0) { n=m; m=y; y=n%m; } //输出m或n都可以 System.out.println("最大公约数是:"+m); } }
原文链接:https://blog.csdn.net/yuemeicheng/article/details/81204864
文章里如果有错误的地方还望朋友指出,谢谢