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

穷举法求最大公约数

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;
}
相关推荐
骑自行车的码农11 小时前
🍂 React DOM树的构建原理和算法
javascript·算法·react.js
CoderYanger11 小时前
优选算法-优先级队列(堆):75.数据流中的第K大元素
java·开发语言·算法·leetcode·职场和发展·1024程序员节
希望有朝一日能如愿以偿11 小时前
力扣每日一题:能被k整除的最小整数
数据结构·算法·leetcode
Controller-Inversion11 小时前
力扣53最大字数组和
算法·leetcode·职场和发展
rit843249911 小时前
基于感知节点误差的TDOA定位算法
算法
m0_3722570211 小时前
ID3 算法为什么可以用来优化决策树
算法·决策树·机器学习
q***252112 小时前
SpringMVC 请求参数接收
前端·javascript·算法
数模加油站12 小时前
25认证杯C题成品论文第一弹【冲奖硬核+无盲点解析】
算法·数学建模·认证杯·25认证杯
MobotStone12 小时前
数字沟通之道
人工智能·算法
点云SLAM12 小时前
Boost库中Math 模块的插值(interpolation使用和示例
算法·插值·boost库·b-spline·akima 样条·单调三次样条·barycentric 插值