求最大公约数和最小公倍数的几种方法

最大公约数

  1. 常规方法
  2. 辗转相除法
  3. 递归法
  4. 三目运算符 + 递归

最小公倍数

  1. 常规方法
  2. 利用最大公约数求解

示例代码:

 1 #include<iostream>
 2 using namespace std;
 3
 4 //最大公约数
 5 //(1)常规方法
 6 void gcd1(int a, int b)
 7 {
 8     int minNum = min(a, b);
 9     for (int i = minNum; i >= 1; i--)
10     {
11         if (a % i == 0 && b % i == 0)
12         {
13             printf("%d\n", i);
14             break;
15         }
16     }
17 }
18
19 //(2)辗转相除法
20 void gcd2(int a, int b)
21 {
22     int tmp;
23     while (true) {
24         if (a == 0)
25         {
26             printf("%d\n", b);
27             break;
28         }
29
30         tmp = a;
31         a = b % a;
32         b = tmp;
33     }
34 }
35
36 //(3)递归法
37 int gcd3(int a, int b)
38 {
39     if (b == 0)
40         return a;
41     else
42         return gcd3(b, a % b);
43 }
44
45 //(4)三目运算符 + 递归
46 int gcd4(int a, int b)
47 {
48     return (b == 0) ? a : gcd4(b, a % b);
49 }
50
51 //最小公倍数
52 //(1)常规方法
53 int lcm1(int a, int b)
54 {
55     int maxNum = max(a , b);
56     int pro = a * b;
57     for(int i = maxNum; i <= pro; i++)
58     {
59         if( i % a == 0 && i % b == 0)
60         {
61             printf("%d\n", i);
62             break;
63         }
64     }
65 }
66
67 //(2)利用最大公约数求解
68 int lcm2(int a, int b)
69 {
70     return a * b / gcd4(a , b);
71 }
72
73 int main()
74 {
75     int a = 15, b = 12;
76     printf("15 和 12 的最大公约数为:\n");
77     gcd1(a, b);
78
79     gcd2(a, b);
80
81     int t = gcd3(a, b);
82     printf("%d\n", t);
83
84     t = gcd4(a, b);
85     printf("%d\n", t);
86
87     printf("15 和 12 的最小公倍数为:\n");
88     lcm1(a, b);
89
90     t = lcm2(a ,b);
91     printf("%d", t);
92
93     return 0;
94 }

运行结果:

时间: 2024-10-26 09:42:28

求最大公约数和最小公倍数的几种方法的相关文章

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

学习C++入门级的题目,求最大公约数和最小公倍数,这里介绍两种求最大公约数的方法,即辗转相除法和辗转相减法.辗转相除法的原理自行百度,辗转相减法的原理就是只要两数不想等就用大数减小数,直至相等,求最小公倍数的方法就是用两数的乘积除以最大公约数. #include<iostream> using namespace std; int maxf(int a,int b)//辗转相减法 { while(a != b) { if(a > b) return a = a - b; else ret

C语言求最大公约数和最小公倍数

求最大公约数和最小公倍数 假设有两个数a和b,求a,b的最大公约数和最小公倍数实际上是一个问题,得出这两个数的最大公约数就可以算出它们的最小公倍数. 最小公倍数的公式是 a*b/m m为最大公约数 因为 a=m*i; b=m*j; 最小公倍数为 m*i*j 那么,下面就开始计算a和b的最大公约数. 更相损减法: <九章算術·方田>作分數約簡時,提到求最大公因數方法:反覆把兩數的較大者減去較小者,直至兩數相等,這數就是最大公因數.這方法除了把除法換作減法外,與輾轉相除法完全相同.例如書中求91和

奇葩的求最大公约数、最小公倍数、分解质因数的做法(C语言)

奇葩的求最大公约数.最小公倍数.分解质因数的做法(C语言) 1 /* 2 最奇葩的求最大公约数与最小公倍数 3 create by laog 4 time 2017年7月27日12:23:14 5 */ 6 7 //两个数的最大公约数 8 //两个数的最小公倍数 9 //将一个正整数分解质因数 --和 2.3.5取余 10 11 #include <stdio.h> 12 13 int main1() 14 { 15 // 3,4 16 //20 17 int v; 18 scanf(&quo

辗转相除法求最大公约数和最小公倍数分析

求最大公约数和最小公倍数 程序分析: (1)最小公倍数=输入的两个数之积除于它们的最大公约数,关键是求出最大公约数: (2)求最大公约数用辗转相除法(又名欧几里德算法) 辗转相除法: #include<stdio.h> int main() { int a,b,c; int raw_a,raw_b; scanf("%d %d",&a,&b); raw_a=a;raw_b=b; c=a%b; while (c!=0) { a=b;b=c; c=a%b; } p

求字符串长度函数实现的三种方法

/* Date: 10/03/19 12:49 Description: 求字符串长度函数实现的三种方法*/ #include<stdio.h> int strlen1(char *s);int strlen2(char *s);int strlen3(char *s); int main(void) { char str[]="The function to test my length."; printf("The length1 is:%d\n",

C语言——求最大公约数及最小公倍数

基本概念 最小公倍数:两个或多个整数公有的倍数叫做它们的公倍数.整数a,b的最小公倍数记为[a,b],同样的,a,b,c的最小公倍数记为[a,b,c],多个整数的最小公倍数也有同样的记号. 最大公约数:也称最大公约数.最大公因子,指两个或多个整数共有约数中最大的一个.a,b的最大公约数记为(a,b),同样的,a,b,c的最大公约数记为(a,b,c),多个整数的最大公约数也有同样的记号. 关于最小公倍数与最大公约数,我们有这样的定理:(a,b)[a,b]=ab(a,b均为整数). 方法分析 最大公

【辗转相除法】求最大公约数和最小公倍数

#include<stdio.h>  void main()   /*  辗转相除法求最大公约数 */   {      int m,n,a,b,t,c;      scanf("%d%d",&a,&b);     m=a;    n=b;     while(b!=0)  /* 余数不为0,继续相除,直到余数为0 */      {    c=a%b;    a=b;     b=c;   }     printf("%d\n", a)

求最大公约数与最小公倍数and输出锥形图案

1:描述:用Python求两个数的最大公约数与最小公倍数.(注意输入的俩个数在正整数范围内) code(代码): a=eval(input('请输入第一个整数:')) b=eval(input('请输入第二个整数:')) c=1 d=a*b if(a<=0 or b<=0): print('输入有误') else: if(a<b): c=a a=b b=c while(c!=0): c=a-b if(c==0): break else: if(c>b): a=c else: a=b

辗转相除法求最大公约数和最小公倍数

要求最小公倍数可先求出最大公约数 设要求两个数a,b的最大公约数 伪代码: int yushu,a,b: while(b不等于0) { yushu=a对b求余 b的值赋给a yushu的值赋给b } 代码: int gongyue() { int yushu,a,b; while(b) { yushu=a%b; a=b; b=yushu; } return b; } 此子函数可以求出两个数的最大公约数n    最小公倍数为a*b/n: