C语言—求最大公约数(4种算法思路)

这篇具有很好参考价值的文章主要介绍了C语言—求最大公约数(4种算法思路)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.穷举法

如果大数可以整除小数,那么最大公约数为小数。如果不能整除小数,那么这两个数就按大到小依次对比小数小的数求余,遇到都能够整除的,就是最大公约数。

int gcd(int a, int b)
{
	int i;
	int min = a < b ? a : b;
	for (i = min; i >= 1; i--)
	{
		if (a % i == 0 && b % i == 0) 
            break;
	}
	return i;
}

2.辗转相除法

用a对b求余,若余数为0,则除数b为最大公约数。若余数不为0,将此余数r作为新的除数,b作为新的被除数,重新求余,直到余数为0为止。此时的最大公约数为除数。

a.常规辗转

int gcd(int a, int b)
{
	int t;
	while(a % b)//当a%b为0时,跳出循环,最大公约数为b
	{
		r = a % b;
		a = b;
		b = t;
	}
	return b;
}

b.递归辗转

int gcd(int a, int b)
{
	int r = a % b;
	if (0 == r)
		return b;//当余数为0时,b就为最大公约数
	else
		return gcd(b, r);
}

3.更相减损法

当两个数相等时,最大公约数为他们其中任意一个;当两个数不相等时,用大数减小数得到的差和之前的那个小数再次相减,直到两个数相等,相等的两个中,任意一个都是最大公约数。文章来源地址https://www.toymoban.com/news/detail-849921.html

a.常规

int gcd(int a, int b)
{
	if (a > b) a = a - b;
	if (a < b) b = b - a;
	if (a == b) return a;
}

b.递归

int gcd(int a, int b) 
{
    if (a == b) return a;//当a=b时,返回
    if (a < b) 
    {
        return gcd(a, b - a);
    }
    return gcd(a - b, b);
}


4.质因数分解法

int gcd(int a, int b) 
{
    int result = 1, i;
    for (i = 2; i <= a && i <= b; i++) 
    {
        while (a % i == 0 && b % i == 0)
        {
            result *= i;
            a /= i;
            b /= i;
        }
    }
    return result;
}

到了这里,关于C语言—求最大公约数(4种算法思路)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【C语言】求最大公约数和最小公倍数

    方法一:利用 定义法 求最大公因数和最小公倍数 方法二:最小公倍数求法同上, 最大公约数方法不同 方法一方法二的结果示例如下   方法三:利用 辗转相除法 求最大公约数和最小公倍数 法(1)结果示例如下:  法(2)示例结果如下:  以上就是用C语言循环和循环之前的

    2024年02月07日
    浏览(32)
  • 最大公约数的三种求法——(C语言)

    如何求解最大公约数,首先了解什么是最大公约数, 如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。 例: 在2、4、6中,2就是2,4,6的最

    2024年02月02日
    浏览(35)
  • 【C语言】辗转相除法求最大公约数(详解)

    辗转相除法(又称欧几里德算法)是一种用于求解两个整数的最大公约数的方法。本文将使用C语言来实现辗转相除法,并对其原理进行解释。 辗转相除法的原理非常简单。假设有两个整数a和b,其中a b。通过对a除以b求余数,得到余数r1。然后把b除以r1求余数,得到余数r2。如

    2024年02月07日
    浏览(34)
  • 【C语言】两个整数最大公约数和最小公倍数

    输入两个整数,求这两个数的最大公约数和最小公倍数。 第一种求法(辗转相除法)这个方法代码较洁简,我也比较推荐就是刚开始有点比较难了解。 首先,来看看怎么求最大公约数,求最大公约数需要用到 欧几里得算法 ,也称为辗转相除法。算法就是用两数中较大的数

    2024年02月04日
    浏览(31)
  • C语言入门——求最大公约数(2种方法超详细)

    基本介绍: 最大公约数(greatest common divisor,简写为 gcd ;或highest common factor,简写为hcf),指某几个整数共有因子中最大的一个。 最大公约数 能够整除一个整数的整数称为其的约数(如5是10约数); 能够被一个整数整除的整数称为其的倍数(如10是5的倍数); 如果一个数既

    2024年02月08日
    浏览(85)
  • 【c语言】—求最大公约数和最小公倍数多种方法

    目录 一.求最大公约数 1.枚举法求最大公约数 2.辗转相除法 二.求最小公倍数 1.枚举法求最小公倍数 2.简易法 3.公式法 思路:先求两个数中的最小值,最大公约数不可能大于两个数的最小数 比如6和18,最大公约数就是6 再如3和9,最大公约数就是3 然后再从1开始循环遍历到最小

    2024年02月08日
    浏览(41)
  • 四种求最大公约数的算法 C / C++

    本篇文章总结了四种 求最大公约数 的常用算法。 包括: 辗转相除法、穷举法(枚举法)、更相减损法、Stein算法 。 每个算法都附加流程图及 C/C++ 代码,并对其 时间复杂度 进行了分析。 1. 算法简介 辗转相除法又称 欧几里得算法 ,是指用于 计算两个正整数a,b的最大公约

    2024年02月03日
    浏览(61)
  • 数论 --- 约数和定理公式推导、最大公约数、欧几里得算法

    和试除法判断一个数是不是质数是一个道理 从小到大枚举所有的约数,如果当前数能整除这个数的话,说明这个数就是当前数的约数 优化,与试除法判断质数是一样的 如果 d 是 n 的约数,n / d 也一定能整除 n,一个数的约数也一定是成对出现的,在枚举的时候也可以只枚举

    2023年04月08日
    浏览(66)
  • 每天一道算法练习题--Day22&& 第一章 --算法专题 --- ----------最大公约数

    关于最大公约数有专门的研究。 而在 LeetCode 中虽然没有直接让你求解最大公约数的题目。但是却有一些间接需要你求解最大公约数的题目。 时间复杂度:最好的情况是执行一次循环体,最坏的情况是循环到 smaller 为 1,因此总的时间复杂度为 O ( N ) O(N) O ( N ) ,其中 N 为 a 和

    2024年02月03日
    浏览(36)
  • 【C语言】一篇博客带你弄懂最大公约数和最小公倍数

    我们在C语言的学习中,经常会遇到这样一些数学题目,良好掌握这些题目有利于我们理解和学习C语言,话不多说,直接进入主题 最大公约数: 首先我们举个例子,比如12 和16,12的约数有(1,2 ,3,4,6,12),16的约数有(1,2,4,8,16)公约数就是两个数共同的约数,(1,2,4)而公约数

    2024年02月04日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包