辗转相除法gcd(a,b)
2016-03-12 23:35
190 查看
辗转相除法的基本原理是:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数。例如,252和105的最大公约数是21(252 = 21 × 12;105 =
21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。
1)假设a是b和c的最大公约数,即b=k1*a,c=k2*a,那么|b-c|=|k1-k2|*a,可知a仍然是两数的差的公约数,由此可推得a是|b-c|和较小数的最大公约数。
2)设a>b且r=a-b;若r>b,根据1)则最大公约数为r-b与b的最大公约数,继续下去直到r'-b<b即r'=a mod b与b的最大公约数.再求r''=b mod r'.当最后求得的两约数相等即r'' mod r' =0时r'即为最大公约数。
C++:
int main(){
int a=0,b=0;
int temp=0;
cin >>a >>b;
if(a<b){
temp=a;
a=b;
b=temp;
}
while(c){
temp=a%b;
a=b;
b=temp;
}
cout<<a;
return 0;
}
21 × 5);因为252 − 105 = 147,所以147和105的最大公约数也是21。在这个过程中,较大的数缩小了,所以继续进行同样的计算可以不断缩小这两个数直至其中一个变成零。这时,所剩下的还没有变成零的数就是两数的最大公约数。
1)假设a是b和c的最大公约数,即b=k1*a,c=k2*a,那么|b-c|=|k1-k2|*a,可知a仍然是两数的差的公约数,由此可推得a是|b-c|和较小数的最大公约数。
2)设a>b且r=a-b;若r>b,根据1)则最大公约数为r-b与b的最大公约数,继续下去直到r'-b<b即r'=a mod b与b的最大公约数.再求r''=b mod r'.当最后求得的两约数相等即r'' mod r' =0时r'即为最大公约数。
C++:
int main(){
int a=0,b=0;
int temp=0;
cin >>a >>b;
if(a<b){
temp=a;
a=b;
b=temp;
}
while(c){
temp=a%b;
a=b;
b=temp;
}
cout<<a;
return 0;
}
相关文章推荐
- 唤醒锁: 检测 Android* 应用中的 No-Sleep(无法进入睡眠)问题
- Matlab小记
- Java面向对象(封装、继承、多态)
- 最近自定义Toolbar之后,左侧不能完全填充,总是留一点空白问题
- A little bottlepy example with uwsgi and nginx
- Android selector的item里的属性说明
- c语言:通过指针变量访问整型变量
- php总结
- 64-题目1190:大整数排序
- uboot启动流程
- Head First 设计模式之观察者模式(Observer Pattern)
- 从相册中选择图片
- 学习 JavaScript 最难点之一 -- 理解prototype(原型)
- Stomp协议以及debug方法
- 说说毕业两年多的经历
- Git 推送分支
- 使用单链表反转的递归和非递归实现方式
- 使用intellij idea搭建MAVEN+springmvc+mybatis框架
- 【LeetCode题意分析&解答】34. Search for a Range
- Spring学习笔记--环境搭建和初步理解IOC