最小公倍数和最大公约数

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

这个是百度上的定义。

另外一个很重要的点 就是:最小公倍数=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.两个数的最小公倍数在最大情况就是当两个数互质时候,即为两数的乘积。

原文地址:https://www.cnblogs.com/ShallByeBye/p/8542183.html

时间: 2024-10-11 05:36:44

最小公倍数和最大公约数的相关文章

常见算法:C语言求最小公倍数和最大公约数三种算法

最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,当中一个最小的公倍数是他们的最小公倍数,相同地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两数的最大公约数 ③ 若c≠0,则a=b,b=c,再回去运行① 比如求27和15的最大公约数过程为: 27÷15 余1215÷12余312÷3余0

最小公倍数和最大公约数求解方法

1.利用辗转相除法求出最大公约数 2.得到最大公约数后,两数相乘除以最大公约数即的最小公倍数 function gcb(x,y){ if(y==0) return x; else return gcb(y,x%y); } function minAndMax(x,y){ var max=x>=y?gcb(x,y):gcb(y,x); var min=x*y/max return "最小公倍数:"+min+"\n最大公约数:"+max; } console.lo

C语言求最小公倍数和最大公约数三种算法(经典)

把以前写的一些经验总结汇个总,方便给未来的学弟学妹们做个参考! --------------------------永远爱你们的:Sakura 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为它们的最小公倍数,维基百科:定义点击打开链接 求最小公倍数算法: 最小公倍数=两整数的乘积÷最大公约数 求最大公约数算法: (1)辗转相除法 有两整数a和b: ① a%b得余数c ② 若c=0,则b即为两

用C++实现最小公倍数和最大公约数

#include<iostream> using namespace std; int main(void) { int x, y, num1, num2, temp; printf("请输入两个正整数:\n"); scanf("%d %d", &num1, &num2); if(num1 < num2)//交换 { num1^=num2; num2^=num1; num1^=num2; } x = num1; y = num2;/

(hdu step 2.1.1)最小公倍数(使用最大公约数来辅助求最小公倍数)

题目: 最小公倍数 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 3609 Accepted Submission(s): 2596   Problem Description 给定两个正整数,计算这两个数的最小公倍数. Input 输入包含多组测试数据,每组只有一行,包括两个不大于1000的正整数. Output 对于每个测试用例,给出这

求最小公倍数和最大公约数

1.分解素因数法:把每个数分别分解素因数,再把各数中的全部公有素因数提取出来连乘,所得的积就是这几个数的最大公约数:先把这几个数的质因数写出来,最小公倍数等于它们所有的质因数的乘积: 2.短除法:短除法求最大公约数,先用这几个数的公约数连续去除,一直除到所有的商互质为止,然后把所有的除数连乘起来,所得的积就是这几个数的最大公约数: 把数字依次相乘,最小公倍数等于它们所有因数的乘积: public class LeastCommonMultiple { // 定义两个数 private int m

求2个数的最小公倍数和最大公约数

1 # -*- coding: UTF-8 -*- 2 3 def gongyueshu(m, n): 4 if n == 0: 5 return m 6 else: 7 return gongyueshu(n, m%n) 8 9 def gongbeishu(m, n): 10 gongyue = gongyueshu(m, n) 11 return (m * n) / gongyue 12 13 gong = gongyueshu(m=18, n=6) 14 print(gong) 15 g

HDU 1713 最小公倍数与最大公约数的问题 相遇周期

欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) 相遇周期 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2465    Accepted Submission(s): 1236 Problem Description 2007年3月26日,在中俄两国元首的见证下,中国国家航天局局长孙来燕与俄罗斯联邦航天局局长别尔米诺夫

C编程:求最大公约数,最小公倍数。

#include<stdio.h> int main() { int a,b;//两个数 int x,y;//暂时保存a,b以便后面求最小公倍数p=(a*b)/a int p;//最小公倍数 int temp; while(scanf("%d %d",&a,&b)!=EOF)//ctrl+Z退出循环 { x=a; y=b;//暂时保存a,b的原值到x,y中,因为后面a,b的值要变. while(b!=0) { temp=a%b; a=b; b=temp; }