求最大公约数

Posted 语风之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求最大公约数相关的知识,希望对你有一定的参考价值。

目录

一、求最大公约数的三种方法

二、主函数及运行结果

三、小结


一、求最大公约数的三种方法

1、暴力穷举法

将m,n中较小数赋值给cd,将cd作为除数,cd通过自减在循环寻找满足(m%cd==0&&n%cd==0)的数作为最大公约数

2、辗转相减法

T为最大公约数,a=mT,b=nT,a-b=(m-n)T,两个数据的差值具有和原始数据相同的最大公约数,通过循环使大的数减小的数直到m-n的最小值为0,此时a=b,a与b为最大公约数

3、辗转相除法

T是m,n的最大公约数,T能整除m,也能整除n,那么就必定能整除(m-n),所以T也是(m-n)的公约数,若m>n,则(m/n)的余数依旧有最大公约数
通过较大数与较小数之间的不断取余得到最大公约数


1、暴力穷举法

int CommonDivisor(int m, int n)
	if (m<n)
		int temp = m;
		int m = n;
		int n = temp;
	
	int cd = n;
	while (cd>0)
		if (m%cd==0&&n%cd==0)
			break;
		
		cd--;
	
	return cd;

2、辗转相减法

int CommonDivisor(int m, int n)
	while (m!=n)
		if (m>n)
			m -= n;
		
		else
			n -= m;
		
	
	return n;

3、辗转相除法

int CommonDivisor(int m, int n)
	while (m*n!=0)
		if (m>n)
			m %= n;
		
		else
			n %= m;
		
	
	return m+n;

二、主函数及运行结果

主函数

#include<stdio.h>
#include<windows.h>
int main()
	int a = 0;
	int b = 0;
	printf("请输入两个数:");
	scanf("%d %d",&a,&b);
	int z = CommonDivisor(a,b);
	printf("最大公约数为:%d\\n",z);
	system("pause");
	return 0;

运行结果


三、小结

求最大公约数的三种方法第一种为穷举,虽然简单但循环次数太多,浪费资源和内存。辗转相减、相除法为更好的方法,需要我们正确理解求差和求余的值也有同样的公约数。多了解,多分析,代码的知识面就拓展开了,从大家那里学到了很多。

以上是关于求最大公约数的主要内容,如果未能解决你的问题,请参考以下文章

求最大公约数伪代码

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

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

辗转相除法

辗转相除法(求最大公约数)与一个猜字小游戏。

最大公约数和最小公倍数