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

穷举法求最大公约数

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;
}
相关推荐
筵陌几秒前
算法:模拟
算法
梵刹古音1 分钟前
【C语言】 结构化编程与选择结构
c语言·开发语言·嵌入式
Queenie_Charlie28 分钟前
小陶与杠铃片
数据结构·c++·树状数组
We་ct31 分钟前
LeetCode 205. 同构字符串:解题思路+代码优化全解析
前端·算法·leetcode·typescript
renhongxia11 小时前
AI算法实战:逻辑回归在风控场景中的应用
人工智能·深度学习·算法·机器学习·信息可视化·语言模型·逻辑回归
CoderCodingNo1 小时前
【GESP】C++四级/五级练习题 luogu-P1223 排队接水
开发语言·c++·算法
爱编码的小八嘎1 小时前
C语言对话-22.想睡觉,偶然
c语言
民乐团扒谱机1 小时前
【AI笔记】精密光时频传递技术核心内容总结
人工智能·算法·光学频率梳
云深处@1 小时前
【C++】AVL树
数据结构
CoderCodingNo1 小时前
【GESP】C++五级/四级练习题 luogu-P1413 坚果保龄球
开发语言·c++·算法