欧几里得算法求最大公约数

两个不全为0的非负整数m,n的最大公约数记为gcd(m,n),代表能够整除(即余数为0)m和n的最大正整数。

计算gcd(m,n)的欧几里得算法:

第一步:

如果n为0,则返回m作为结果,同时过程结束;否则进入第二步。

第二步:

m除以n,将余数赋值给l。

第三步:

将n的值赋值给m,将l的值赋值给n,返回第一步。

示例:

例如求gcd(27,30)

gcd(27,30)= gcd(30,27)= gcd(27,3)= gcd(3,0)=3

27与30的最大公约数为3

C语言欧几里得算法求最大公约数:

C语言代码:

cpp 复制代码
/*
	求两个不全为0的非负整数的最大公约数
		欧几里得算法
*/

#include<stdio.h>
#include<stdbool.h>

// 欧几里得算法函数
int OJLD(int x, int y)
{
	int z;
	while (y != 0)
	{
		z = x % y;
		x = y;
		y = z;
	}
	return x;
}

int main()
{
	int m, n, result;
	bool flag;
	do
	{
		flag = false;
		printf("请输入两个不全为0的非负整数,中间以空格分隔:\n");
		scanf_s("%d %d", &m, &n);

		//输入检验,确保m,n为两个不全为0的非负整数
		if ((m < 0 || n < 0)||(m==0 && n==0))
		{	
			flag = true;
			printf("您的输入有误,请重新输入\n");
		}
	} while (flag);

	result = OJLD(m, n);  //调用欧几里得函数计算最大公约数
	printf("%d与%d的最大公约数为%d", m,n,result);  //输出结果
	return 0;
}

运行示例:

相关推荐
初级炼丹师(爱说实话版)10 分钟前
算法面经常考题整理(3)大模型
算法
yolo_guo1 小时前
C++ ABI:编译报错之:gcc 4.8.1 切 gcc 6.1.0
c++
路在脚下@1 小时前
C++ 知识体系
c++·1024程序员节
Neil今天也要学习1 小时前
永磁同步电机无速度算法--基于相位超前校正的LESO
算法·1024程序员节
qq_310658511 小时前
webrtc代码走读(四)-QOS-NACK实现-发送端
c++·webrtc
码农多耕地呗1 小时前
力扣226.翻转二叉树(java)
算法·leetcode·职场和发展
IT古董3 小时前
【第五章:计算机视觉-项目实战之推荐/广告系统】2.粗排算法-(3)理解粗排模型之在线部分:在线架构及对双塔的应用
算法·1024程序员节
大数据张老师3 小时前
数据结构——平衡二叉树
数据结构·算法·查找
py有趣3 小时前
LeetCode算法学习之合并区间
学习·算法·leetcode
长欢喜一场3 小时前
高精度算法全解析:从原理到实现
c++·1024程序员节