辗转相除法的原理

简单证明辗转相除法的原理

1.

解析:

8251=6105+2146,为了表示简单,我就用a=b+c表示这个吧

于是有c=a-b  那么如果有d|a,且d|b,就必然有d|a-b,也就是d|c, (d|a表示:d为a的约数)

可见a和b的公约数必然也是c的约数.

现在假设d是a和b的最大公约数,那么d也必然是c的约数,于是d是b,c的公约数,

现在就要证明它是最大公约数:

2.

证明:

因为a=b+c,于是b,c的公约数也必然是a的约数,假设(b,c)=e, ((b,c)=e表示e为b和c的最大公约数)那么有e|b+c,即e|a 根据"d是b,c的公约数"知道d|e,, 又因为e

也是a,b的公约数,e|d,综上有e=d  可见(a,b)=(b,c)=d

(这个思想一推广

,

就成了辗转相除法了)

15/6   余数一定小于6,会变得越来越小,最终变成最大公约数。

时间: 2024-08-09 23:52:08

辗转相除法的原理的相关文章

九度 1104 以及 辗转相除法的原理f昂发

//方法一 //对每个形如 (A*a+ B)* a^k的数,前面的A 没有意义的,只有B //才有可能继续被用来作为未来的因子,所以每次只需要保留比a小的B 就够了.代码如下: #include <cstdio> #include <iostream> #include <cstring> using namespace std; #ifdef ONLINE_JUDGE #define FINPUT(file) 0 #define FOUTPUT(file) 0 #el

求最大公约数和最小公倍数

学习C++入门级的题目,求最大公约数和最小公倍数,这里介绍两种求最大公约数的方法,即辗转相除法和辗转相减法.辗转相除法的原理自行百度,辗转相减法的原理就是只要两数不想等就用大数减小数,直至相等,求最小公倍数的方法就是用两数的乘积除以最大公约数. #include<iostream> using namespace std; int maxf(int a,int b)//辗转相减法 { while(a != b) { if(a > b) return a = a - b; else ret

《Java程序员面试宝典》学习笔记(数据结构部分)

有一千万行重复的短信,以文本文件的形式保存,一行一条,有重复.如何找出重复次数最多的10条? 可以用哈希表的方法对1千万条分成若干组进行边扫描边建散列表.第一次扫描,取首字节,尾字节,中间随便两字节作为Hash Code,插入到hash table中.并记录其地址和信息长度和重复次数,1千万条信息,记录这几个信息还放得下.同Hash Code且等长就疑似相同,比较一下.相同记录只加1次进hash table,但将重复次数加1.一次扫描以后,已经记录各自的重复次数,进行第二次hash table的

openwrt教程 第一章 物联网&amp;openwrt开发概述

转载请注明出处:http://blog.csdn.net/ns_code/article/details/28505569 序言 求两个正整数的最大公约数是一个很古老且很基本的问题,欧几里得在其著作<几何原本>中给出了高效的解法--辗转相除法,也叫做欧几里得算法.下面我们来看下求最大公约数的一些方法. 方法一 我们先来看欧几里得的辗转相除法.原理很简单,假设用f(x,y)表示x和y的最大公约数,我们令x>y,则有x=ky+b,如果一个数能够同时整除x和y,则必能同时整除b和y,而能够同时

hdu1722 bjfu1258 辗转相除法

这题就是个公式,代码极简单.但我想,真正明白这题原理的人并不多.很多人只是随便网上一搜,找到公式a了就行,其实这样对自己几乎没有提高. 鉴于网上关于这题的解题报告中几乎没有讲解原理的,我就多说几句,也不是严格的证明,给大家分享一下. 题目是说有p人或q人吃蛋糕,需要提前把蛋糕切好而能同时满足这两种情况,使蛋糕的块数最少.为了方便表述,不妨设p < q 首先,记p和q的最小公倍数为m,则把蛋糕平均切成m块,一定是能满足条件的,但这不是最优解,暂记为解法①. 我们的工作就是把解法①的这m块中的一些尽

辗转相除法求H.C.F小结

辗转相除法 大纲: 问题 原理 反思 1.     问题 一个试题,请完成以下填空 下列程序是利用辗转相除法求H.C.F(最大公约数) 1 include <stdio.h> 2 3 int main(){ 4 5 int m,n,r; 6 7 scanf("%d%d",&m,&n); 8 9 r=[?1]; 10 11 while([?2]){ 12 13 m=[?3];n=r;r=[?4]; 14 15 printf("h.c.f is %d&

算法学习 - 欧几里得算法(辗转相除法)(c++实现)

欧几里得算法 欧几里得算法也叫辗转相除法,是求两个整数最大公约数的算法. 当然也可以求最小公倍数. 算法实现 其实算法的实现原理就是,有整数a b两个,每次求的一个数字r = a % b,然后把b放到a的位置,把r放到b的位置,递归调用. 就是gcd(a, b) { return gcd(b, a%b); }这个样子的. 结束条件是当 a%b == 0的时候停止. 最大公约数 // // main.cpp // Euclidean // // Created by Alps on 15/3/28

辗转相除法的实现

辗转相除法基于如下原理:两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数.#include<stdio.h> //使用辗转相除法求最大公约数int gcd(int a, int b){ if (a % b == 0) { printf("%d",b); } else { return gcd(b, a%b); }}int main (void){ gcd(8,6);//测试8,6的最大公约数,默认a>b}

轻松学习RSA加密算法原理

以前也接触过RSA加密算法,感觉这个东西太神秘了,是数学家的事,和我无关.但是,看了很多关于RSA加密算法原理的资料之后,我发现其实原理并不是我们想象中那么复杂,弄懂之后发现原来就只是这样而已.. 学过算法的朋友都知道,计算机中的算法其实就是数学运算.所以,再讲解RSA加密算法之前,有必要了解一下一些必备的数学知识.我们就从数学知识开始讲解. 必备数学知识 RSA加密算法中,只用到素数.互质数.指数运算.模运算等几个简单的数学知识.所以,我们也需要了解这几个概念即可. 素数 素数又称质数,指在一