最小公倍数和最大公约数
Posted 醒佳只是个Shall_ByeBye
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小公倍数和最大公约数相关的知识,希望对你有一定的参考价值。
最近做到一个 分核桃的题。原题描述如下,就是一个求最小公倍数的题。这个知识点已经忘了。。就去百度查了一下,就有了这一篇总结。
这个是百度上的定义。
另外一个很重要的点 就是:最小公倍数=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));
以上是关于最小公倍数和最大公约数的主要内容,如果未能解决你的问题,请参考以下文章
Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)
从图库中选择照片(onActivityResult()问题 - 我想是这样) - 片段Android
代码代码:输入两个正整数m和n,求其最大公约数和最小公倍数。15 20 5
Java8 Stream针对List先分组再求和最大值最小值平均值等