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

穷举法求最大公约数

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;
}
相关推荐
艾醒8 分钟前
大模型原理剖析——多头潜在注意力 (MLA) 详解
算法
艾醒11 分钟前
大模型原理剖析——DeepSeek-V3深度解析:671B参数MoE大模型的技术突破与实践
算法
charlie1145141911 小时前
现代C++嵌入式教程:C++98基础特性:从C到C++的演进(1)
c语言·开发语言·c++·笔记·学习·教程
jifengzhiling1 小时前
零极点对消:原理、作用与风险
人工智能·算法
鲨莎分不晴2 小时前
【前沿技术】Offline RL 全解:当强化学习失去“试错”的权利
人工智能·算法·机器学习
XFF不秃头2 小时前
力扣刷题笔记-全排列
c++·笔记·算法·leetcode
菜鸟233号3 小时前
力扣669 修剪二叉搜索树 java实现
java·数据结构·算法·leetcode
光羽隹衡3 小时前
机械学习逻辑回归——银行贷款案例
算法·机器学习·逻辑回归
CQ_YM3 小时前
Linux管道通信
linux·c语言·管道·ipc·管道通信