C语言 -- 递归求最大杏彩源码下载公约数和最小公倍数

递归求杏彩源码下载论坛:haozbbs.com Q1446595067最大公约数和最小公倍数

最大公约数(GCD)

int gcd(int a, int b)
{
return a % b ? gcd(b, a % b) : b;
}

1
2
3
4

用辗转相除法求最大公约数,用递归写的代码会比循环简洁一些。

先判断a除以b的余数是否为0。

 a % b ?

1

不为0的话,则继续用被除数作为除数,用上一步的余数作为除数继续运算。

 a % b ? gcd(b , a%b)

1

是0的话则b就位两数的最大公约数,则返回b。

 a % b ? gcd(b , a%b): b

1

注 : 这里不用考虑a 和 b的大小。如果a 小于 b, a%b 就等于 a ,则调用gcd (b, a % b)就等同于调用 gcd (b, a) , 所以无需判断是否交换。

最小公倍数 (LCM)

int lcm(int a, int b)
{
return a * b / gcd(a, b);
}

1
2
3
4

公式法,两数乘积除以最大公约数即为最小公倍数。

具体测试 :

#include<stdio.h>
#include<math.h>

int gcd(int a, int b);
int lcm(int a, int b);

int main () {
int a, b;
while(scanf("%d %d", &a, &b) != EOF)
{
printf("最大公约数:%d \n最小公倍数:%d", gcd(a, b), lcm(a, b));
}
return 0;
}

int gcd(int a, int b)
{
return a % b ? gcd(b, a%b) : b;
}

int lcm(int a, int b)
{
return a * b / gcd(a, b);
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25

这里写图片描述

猜你喜欢

转载自blog.51cto.com/13852099/2135905