C语言之linux内核实现最大公约数算法

简介:

最大公约数算法,又称欧几里算法,至今已有几千年的历史了。在我们开始学习C语言的时候最常用的算法就是辗转相除法,其实在linux内核中,内核也是使用这样的方法实现两数最大公约数的计算。

     两个整数的最大公约数是能够同时整除它们的最大的正整数。辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。

      例如,252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);

      算法原理:

设两数为a、b(b<a),用gcd(a,b)表示a,b的最大公约数,r=a (mod b) 为a除以b以后的余数,k为a除以b的商,即a÷b=k .......r。辗转相除法即是要证明gcd(a,b)=gcd(b,r)。
第一步:令c=gcd(a,b),则设a=mc,b=nc
第二步:根据前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根据第二步结果可知c也是r的因数
第四步:可以断定m-kn与n互质【否则,可设m-kn=xd,n=yd (d>1),则m=kn+xd=kyd+xd=(ky+x)d,则a=mc=(ky+x)dc,b=nc=ycd,故a与b最大 公约数成为cd,而非c,与前面结论矛盾】
从而可知gcd(b,r)=c,继而gcd(a,b)=gcd(b,r)。
http://home.ebrun.com/u-1120007.html
http://home.ebrun.com/u-1120008.html
http://home.ebrun.com/u-1120009.html
http://home.ebrun.com/u-1120011.html
http://home.ebrun.com/u-1120015.html
http://home.ebrun.com/u-1120013.html
http://home.ebrun.com/u-1120021.html
http://home.ebrun.com/u-1120019.html
http://home.ebrun.com/u-1120016.html
http://home.ebrun.com/u-1120024.html
http://home.ebrun.com/u-1120012.html
http://home.ebrun.com/u-1120023.html
http://home.ebrun.com/u-1120025.html
http://home.ebrun.com/u-1120022.html
http://home.ebrun.com/u-1120018.html
http://home.ebrun.com/u-1120020.html
http://home.ebrun.com/u-1120014.html
http://home.ebrun.com/u-1120010.html
http://home.ebrun.com/u-1120017.html
http://home.ebrun.com/u-1120031.html
http://home.ebrun.com/u-1120032.html
http://home.ebrun.com/u-1120033.html
http://home.ebrun.com/u-1120034.html
http://home.ebrun.com/u-1120035.html
http://home.ebrun.com/u-1120036.html
http://home.ebrun.com/u-1120038.html
http://home.ebrun.com/u-1120037.html
http://home.ebrun.com/u-1120039.html
http://home.ebrun.com/u-1120041.html
http://home.ebrun.com/u-1120043.html
http://home.ebrun.com/u-1120053.html
http://home.ebrun.com/u-1120051.html
http://home.ebrun.com/u-1120047.html
http://home.ebrun.com/u-1120044.html
http://home.ebrun.com/u-1120045.html
http://home.ebrun.com/u-1120042.html
http://home.ebrun.com/u-1120050.html
http://home.ebrun.com/u-1120054.html
http://home.ebrun.com/u-1120048.html
http://home.ebrun.com/u-1120052.html
http://home.ebrun.com/u-1120061.html
http://home.ebrun.com/u-1120056.html
http://home.ebrun.com/u-1120062.html
http://home.ebrun.com/u-1120040.html
http://home.ebrun.com/u-1120057.html
http://home.ebrun.com/u-1120055.html
http://home.ebrun.com/u-1120059.html
http://home.ebrun.com/u-1120064.html
http://home.ebrun.com/u-1120060.html



目录
相关文章
|
10月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
377 1
|
存储 算法 C语言
"揭秘C语言中的王者之树——红黑树:一场数据结构与算法的华丽舞蹈,让你的程序效率飙升,直击性能巅峰!"
【8月更文挑战第20天】红黑树是自平衡二叉查找树,通过旋转和重着色保持平衡,确保高效执行插入、删除和查找操作,时间复杂度为O(log n)。本文介绍红黑树的基本属性、存储结构及其C语言实现。红黑树遵循五项基本规则以保持平衡状态。在C语言中,节点包含数据、颜色、父节点和子节点指针。文章提供了一个示例代码框架,用于创建节点、插入节点并执行必要的修复操作以维护红黑树的特性。
238 1
|
8月前
|
算法 C语言
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
本文档介绍了如何编写两个子函数,分别求任意两个整数的最大公约数和最小公倍数。内容涵盖循环控制与跳转语句的使用、最大公约数的求法(包括辗转相除法和更相减损术),以及基于最大公约数求最小公倍数的方法。通过示例代码和测试说明,帮助读者理解和实现相关算法。最终提供了完整的通关代码及测试结果,确保编程任务的成功完成。
303 15
【C语言程序设计——函数】利用函数求解最大公约数和最小公倍数(头歌实践教学平台习题)【合集】
|
8月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
201 18
|
10月前
|
存储 算法 数据管理
C语言算法复杂度
【10月更文挑战第20天】
97 5
C语言算法复杂度
|
9月前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
10月前
|
存储 缓存 算法
C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力
本文探讨了C语言在实现高效算法方面的特点与优势,包括高效性、灵活性、可移植性和底层访问能力。文章还分析了数据结构的选择与优化、算法设计的优化策略、内存管理和代码优化技巧,并通过实际案例展示了C语言在排序和图遍历算法中的高效实现。
268 2
|
10月前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
208 1
|
10月前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
245 1
|
10月前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###

热门文章

最新文章