提示:此篇小白编写,如有建议请多多指教。
前言
1.枚举法(暴力求解法) 2.展转相除法(欧几里德算法) gcd(a,b) = gcd(b,a mod b) (不妨设a>b 且r=a mod b ,r不为0) 例如,求(319,377): ∵ 319÷377=0(余319) ∴(319,377)=(377,319); ∵ 377÷319=1(余58) ∴(377,319)=(319,58); ∵319÷58=5(余29) ∴ (319,58)=(58,29); ∵ 58÷29=2(余0) ∴ (58,29)= 29; ∴(319,377)=29。 能够写成右边的格式。 用展转相除法求几个数的最大公约数,能够先求出其中任意两个数的最大公约数,再求这个最大公约数与第三个数的最大公约数,依次求下去,直到最后一个数为止。最后所得的那个最大公约数,就是全部这些数的最大公约数。
一、公约数是什么?
定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数(Greatest Common Divisor)缩写为GCD。
二、求最大公约数的方法
1.枚举法
代码如下:
import java.util.Scanner;
public class GongYueShu {
public static void main(String[]args) {
Scanner in =new Scanner(System.in);
System.out.println("请输入一个自然数");
int a =in.nextInt();
System.out.println("请再输入一个自然数");
int b =in.nextInt();
int daan=1;
for ( int i = 2; i<=a && i<=b ;i++ )
{
if ( a % i == 0 && b % i == 0 )
{
daan = i;
}
}
System.out.println(a+"和"+b+"的最大公约数是"+daan);
}
}
2.展转相除法(欧几里德算法)
代码如下:
import java.util.Scanner;
public class GongYueShu2 {
public static void main(String[]args) {
Scanner in =new Scanner(System.in);
System.out.println("请输入一个自然数");
int a =in.nextInt();
System.out.println("请再输入一个自然数");
int b =in.nextInt();
int oa = a;
int ob = b;
while (b!=0)
{
int r = a % b;
a = b;
b = r;
}
System.out.println(oa+"和"+ob+"的最大公约数是"+a);
}
}
总结
效果呈现
![](https://img-blog.csdnimg.cn/ac4a90b201db4bc59716821e6dde13f0.png)
开头import java.util.Scanner;引入Scanner工具,可进行算法输入
Scanner类的创建对象: Scanner S=new Scanner(System.in); 从键盘接收数据,next方式接收字符串。