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

两个不全为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;
}

运行示例:

相关推荐
Charles Ray8 分钟前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码9 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
limingade2 小时前
手机实时提取SIM卡打电话的信令和声音-新的篇章(一、可行的方案探讨)
物联网·算法·智能手机·数据分析·信息与通信
jiao000015 小时前
数据结构——队列
c语言·数据结构·算法
迷迭所归处6 小时前
C++ —— 关于vector
开发语言·c++·算法
leon6256 小时前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
CV工程师小林6 小时前
【算法】BFS 系列之边权为 1 的最短路问题
数据结构·c++·算法·leetcode·宽度优先
Navigator_Z7 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
Aic山鱼7 小时前
【如何高效学习数据结构:构建编程的坚实基石】
数据结构·学习·算法
white__ice7 小时前
2024.9.19
c++