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

190 阅读2分钟

一、最大公约数

两个或多个整数共有约数中最大的一个成为最大公约数。

1、辗转相除法

辗转相除法是求两个自然数的最大公约数的一种方法,也称为欧几里得算法。具体做法是将除数和余数反复做除法运算,当余数为0时,取当前算式的除数为最大公约数。
如求783和31两个正整数的最大公约数:
783 ÷ 31 = 25.....8
31 ÷ 8 = 3......7
8 ÷ 7 = 1.......1
7 ÷ 1 = 7......0
故783与31的最大公约数为1.

C语言代码如下:

#include <stdio.h>
int main(){
	int m,n,c;
	scanf("%d %d",&m,&n);
	while(n!=0){
		c = m%n;
		m=n;
		n=c;
	}
	printf("%d",m);
	return 0;
} 

2、更相减损术

将大数-小数,并辗转相减,直到减数与差相同时该数即为最大公约数。
如求98与63的最大公约数:
98 - 63 = 35
63 - 35 = 28
35 - 28 = 7
28 - 7 = 21
21 - 7 = 14
14 - 7 = 7
故98与63的最大公约数为7.
C语言代码如下:

#include <stdio.h>
 int main(){
 	int m,n,c;
 	scanf("%d %d",&m,&n);
	 while(m!=n){
	 	if(n>m){
 		c=m;
 		m=n;
 		n=c;
	    }
	 	c = m - n;
	 	m=n;
	 	n=c;
	 }
	 printf("%d",m);
	 return 0;
 }

二、最小公倍数

两个或多个整数公有的倍数叫做它们的公倍数,其中除0以外最小的一个公倍数就叫做这几个整数的最小公倍数。

公式法

由于两个数的乘积等于这两个数的最大公约数与最小公倍数的积所以,求两个数的最小公倍数,就可以先求出它们的最大公约数,然后用上述公式求出它们的最小公倍数。

#include<stdio.h>
int main(){
	int m,n,c;
	scanf("%d %d",&m,&n);
	int a=m,b=n;
	while(n!=0){
		c = m%n;
		m=n;
		n=c;
	}
	printf("%d\n",m);//最大公约数 
	printf("%d",a*b/m);//最小公倍数 
	return 0;
}