用穷举法,欧几里得算法,递归求两个整数的最大公约数

穷举法求最大公约数

cs 复制代码
#include<stdio.h>
int Gcd(int i, int j)//穷举法求最大公约数
{
	int min = (i > j) ? j : i;//条件表达式,找到最小值
	while (1)
	{
		if (i % min == 0 && j % min == 0)
			break;
		min--;
	}
	return min;
}
int main()
{
	int i = 0;
	int j = 0;
	printf("请输入两个整数:\n");
	scanf("%d,%d", &i, &j);
	int ret = Gcd(i, j);
	printf("%d", ret);
	return 0;
}

欧几里得算法(辗转相除法)求最大公约数

cs 复制代码
#include<stdio.h>
int Gcd(int i, int j)//欧几里得算法(也称辗转相除法)
{
	int r = 0;
	int max = 0;//存储i,j中的最大值
	int min = 0;//存储i,就,中的最小值
	if (i < j)
	{
		max = j;
		min = i;
	}
	else
	{
		max = i;
		min = j;
	}
	while (1)
	{
		r = max % min;
		max = min;
		min = r;
		if (r == 0)
			break;
	}
	return max;
}
int main()
{
	int i = 0;
	int j = 0;
	printf("输入两个整数:\n");
	scanf("%d,%d", &i, &j);
	int ret = Gcd(i, j);
	printf("%d", ret);
	return 0;
}

用递归求最大公约数

cs 复制代码
#include<stdio.h>
int Gcd(int i, int j)//递归求最大公约数
{
	if (i > j)//如果i<j,则i和j与i-j和j的最大公约数相同,即Gcd(i,j)=Gcd(i-j,j)
		return Gcd(i - j, j);
	else if (i < j)//如果j < i,则i和j与i和j-i的最大公约数相同,即Gcd(i,j)=Gcd(i,j-i)
		return Gcd(i, j - i);
	else
		return i; //如果i=j,则i和j的最大公约数与i值和j值相同, 即Gcd(i, j) =i=j
}
int main()
{
	int i = 0;
	int j = 0;
	printf("输入两个整数:\n");
	scanf("%d,%d", &i, &j);
	int ret = Gcd(i, j);
	printf("%d", ret);
	return 0;
}
相关推荐
Insight5 分钟前
拒绝手动 Copy!一文吃透 PyTorch/NumPy 中的广播机制 (Broadcasting)
算法
CoovallyAIHub26 分钟前
工业视觉检测:多模态大模型的诱惑
深度学习·算法·计算机视觉
Jayden_Ruan33 分钟前
C++分解质因数
数据结构·c++·算法
bubiyoushang8881 小时前
MATLAB实现雷达恒虚警检测
数据结构·算法·matlab
wu_asia1 小时前
编程技巧:如何高效输出特定倍数数列
c语言·数据结构·算法
AlenTech1 小时前
207. 课程表 - 力扣(LeetCode)
算法·leetcode·职场和发展
你怎么知道我是队长1 小时前
C语言---无名位域
c语言·开发语言
星火开发设计2 小时前
C++ queue 全面解析与实战指南
java·开发语言·数据结构·c++·学习·知识·队列
橘颂TA2 小时前
【剑斩OFFER】算法的暴力美学——力扣 394 题:字符串解码
数据结构·c++·结构与算法
练习时长一年2 小时前
LeetCode热题100(杨辉三角)
算法·leetcode·职场和发展