最小公倍数和最大公约数

最近做到一个 分核桃的题。原题描述如下,就是一个求最小公倍数的题。这个知识点已经忘了。。就去百度查了一下,就有了这一篇总结。

这个是百度上的定义。

另外一个很重要的点 就是:最小公倍数=x*y/最大公约数;所以重点就转到了求最大公约数上。最大公约数可以用以下三种方法:辗转相除法,更相折损法(相减法),穷举法。代码如下。

 1 import java.util.Scanner;
 2 
 3 
 4 public class 最小公倍数{
 5     public static void main(String[] args) {
 6         Scanner in = new Scanner(System.in);
 7         System.out.print("input x :");
 8         int x = in.nextInt();
 9         System.out.print("input y :");
10         int y = in.nextInt();
11         
12         int z = Method(x,y);
13         System.out.println("辗转相除法:");
14         System.out.println("divisor : "+z);
15         System.out.println("multiple : "+(x*y/z));
16         
17         System.out.println("相减法:");
18         z = Subtraction(x,y);
19         System.out.println("divisor : "+z);
20         System.out.println("multiple : "+(x*y/z));
21         
22         System.out.println("穷举法:");
23         z = divisor(x,y);
24         System.out.println("divisor : "+divisor(x,y));
25         z=multiple(x,y);
26         System.out.println("multiple : "+multiple(x,y));
27     }
28     
29     //辗转相除法:返回公约数
30     public static int Method(int x,int y){
31         int a,b,c;
32         a=x;
33         b=y;
34         while(b!=0){
35             c=a%b;
36             a=b;
37             b=c;
38         }
39         return a;
40     }
41     //相减法
42     public static int Subtraction(int x,int y){
43         while(x!=y){
44             if(x>y){
45                 x=x-y;
46             }
47             else{
48                 y=y-x;
49             }
50         }
51         return x;
52     }
53     //穷举法  求公约数
54     public static int divisor(int x,int y){
55         int z;
56         for(z=x;z>0;z--){
57             if(x%z==0&&y%z==0){
58                 break;
59             }
60         }
61         return z;
62     }
63     //求公倍数
64     public static int multiple(int x,int y){
65         int z;
66         for(z=x;;z++){
67             if(z%x==0&&z%y==0){
68                 break;
69             }
70         }
71         return z;
72     }
73     
74 }

回到分核桃的题,因为是三个数,所以我用了穷举法求,其实用穷举就不用求公约数了直接公倍数就好。代码如下:

 1 import java.util.Arrays;
 2 import java.util.Scanner;
 3 
 4 public class 核桃数量 {
 5     public static int ICD(int a,int b,int c){
 6         int k=getMax(a,b,c);
 7         for(int i=k;;i++){
 8             if(i%a==0 && i%b==0 && i%c==0){
 9                 return i;
10             }
11         }
12         
13     }
14     public static int getMax(int a,int b,int c){
15         int aa[]={a,b,c};
16         Arrays.sort(aa);
17         return aa[2];
18     }
19     public static void main(String[] args) {
20         Scanner sc=new Scanner(System.in);        
21         int a=sc.nextInt();
22         int b=sc.nextInt();
23         int c=sc.nextInt();
24         System.out.println(ICD(a,b,c));
25     }
26 
27 }

然后看笔记上之前还有写段关于最大的最小公倍数:

1.大于1的两个相邻自然数必定互质=》公约数只有1的两个整数。

2.两个数的最小公倍数在最大情况就是当两个数互质时候,即为两数的乘积。

3/31修改内容!!!!

刚刚写BigInteger发现有 gcd函数。

BigInteger a=new BigInteger("12");
BigInteger b=new BigInteger("60");
System.out.println(a.gcd(b));
原文地址:https://www.cnblogs.com/ShallByeBye/p/8542183.html