C语言之linux内核实现最大公约数算法
来源:互联网 发布:网络渗透的危害的对策 编辑:程序博客网 时间:2024/06/06 04:58
最大公约数算法,又称欧几里德算法,至今已有几千年的历史了。在我们开始学习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.htmlhttp://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
0 0
- C语言之linux内核实现最大公约数算法
- C语言之linux内核实现平方根计算算法
- C语言之linux内核实现位数高低位互换
- C语言之linux内核可变参实现printf,sprintf
- C语言之基本算法10—最大公约数和最小公倍数
- 最大公约数,最小公倍数(C语言实现)
- 最大公约数 最小公倍数 C语言实现
- linux内核之hlist哈希链表的应用---C语言代码实现(内核态)
- C语言实现linux内核链表
- C语言求最大公约数和最小公倍数算法
- c语言求最大公约数三种算法
- C语言最大公约数三种算法
- 三种算法求最大公约数c语言
- Linux内核学习之list_entry --- 用C语言实现泛型编程
- Linux内核学习之list_entry --- 用C语言实现泛型编程
- 求最大公约数,最小公倍数(C语言实现)
- 求最大公约数,最小公倍数(C语言实现)
- C语言实现 递归法求最大公约数
- LETools
- Fortran 第一课
- 算法导论—最长递增子序列
- Session服务器配置指南与使用经验
- 【小松教你手游开发】【面试必读(编程基础)】 八大排序算法
- C语言之linux内核实现最大公约数算法
- vim巧妙用法
- 大部分人都会做错的经典JS闭包面试题
- Python笔记(2)——数据类型和数据结构
- Servlet原理
- bootstrap排版、代码、表格
- URI与URL
- __weak 和 __block 关键字的区别
- Android Support V4是什么?