最大公约数
2014-03-03 21:26
162 查看
公约数的性质
d|a且d|b,意味着d|(ax+by) 其中x,y为任意整数
最大公约数性质
gcd(an,bn)=n *gcd(a,b)
gcd(a*p,b)=gcd(a,b)// p为质数
合数的性质
任何一个合数可以写成质数幂的唯一形式
欧几里德算法
gcd(a,b)=gcd(b,a%b)
其时间复杂度与fib数有关系,如果b<F(k+1)则递归调用次数少于k次
欧几里德算法的扩展形式
gcd(a,b)=gcd(b,a-b) b>a-b
扩展形式利用了公约数的性质,其问题在于相减的过程中重复的迭代的次数有些多,可以再利用最大公约数的性质进行优化
算法
d|a且d|b,意味着d|(ax+by) 其中x,y为任意整数
最大公约数性质
gcd(an,bn)=n *gcd(a,b)
gcd(a*p,b)=gcd(a,b)// p为质数
合数的性质
任何一个合数可以写成质数幂的唯一形式
欧几里德算法
gcd(a,b)=gcd(b,a%b)
其时间复杂度与fib数有关系,如果b<F(k+1)则递归调用次数少于k次
欧几里德算法的扩展形式
gcd(a,b)=gcd(b,a-b) b>a-b
扩展形式利用了公约数的性质,其问题在于相减的过程中重复的迭代的次数有些多,可以再利用最大公约数的性质进行优化
算法
int gcd(int a,int b) { if(a<b) return gcd(b,a); if(b==0) return a; if(isEven(a)) { if(isEven(b)) return gcd(a>>1,b>>1)<<1;// a/2,b/2 然后把2提取出来 else return gcd(a>>1,b); } else { if(isEven(b)) return gcd(a,b>>1); else return gcd(b,a-b); } }
相关文章推荐
- C++中const详解
- 挑7
- OpenSuse下编译MonoDevelop
- hadoop(适合大数据的分布式存储和分布式计算平台)---总结
- 事件处理概述
- NSArray中的对象进行排序
- 三、Cocos2dx之重要概念及Test例子
- 【转】iOS SDK: 使用NSUserDefaults
- 正三角形的外接圆面积
- Populating Next Right Pointers in Each Node
- 简单工厂、工厂方法、抽象工厂
- org.apache.hadoop.hdfs.server.namenode.SafeModeException
- 关于HOG的理解
- 题目1191:矩阵最大值
- tomcat的bin目录下脚本
- android系统action大全
- 2014年王道论坛研究生机试练习赛(二) 题目1470:调整方阵
- python 编码转换
- Matlab作图(基础指令)
- C#专题一:登陆界面的基本实现