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

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

运行示例:

相关推荐
aramae5 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
荆棘鸟智能6 小时前
城市感知设备怎么统一接入?从多协议网关到设备模型的中间件架构设计
人工智能·算法·边缘计算
知识分享小能手9 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习
qq_199886879 小时前
第8板块·第2节:统一内存的高级特性与性能调优
c++·人工智能·gpu算力·cuda
INGNIGHT10 小时前
270 · 电话号码的字母组合II(Trie)
linux·算法
2401_8390805410 小时前
C++常见八股
数据结构·c++·算法
qq_1998868710 小时前
第6板块 第2节 CUDA运行时API与驱动API 核心笔记
c++·人工智能·gpu算力
青山是哪个青山10 小时前
LeetCode 188:买卖股票的最佳时机 IV
算法
mikuyyds11 小时前
geo-toolbox 插件算法解析:RUSLE 与 MUSLE 的工程化落地
算法·rust·gis
a1879272183111 小时前
【算法】树(二):队列与祖先——BFS 骨架三配件、短路透传与合流
算法·leetcode·二叉树··bfs·算法讲解·树遍历