辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。
生活随笔
收集整理的這篇文章主要介紹了
辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先我們規定:0不參與公約數和公倍數的討論
先來討論最大公約數:
最大公約數求法:兩個數的所有公共質數相乘. 考慮三個問題。
由3得: 兩個數相乘=這兩個數的最大公約數*最小公倍數
因為最大公約數兩個數的公共質數相乘, 但最小公倍數是兩個數相乘后除以公共質數
(第三點),因此互補。
證明:
結論:
1、最大公因數是兩個數的公共質數相乘。
2、最小公倍數是兩個數相乘后除以公共質數
3、兩個數相乘=最大公因數*最小公倍數。
接下來是經典的“輾轉相除法(歐幾里得算法)”求最大公約數與最小公倍數的代碼。
輾轉相除法基于如下原理:兩個整數的最大公約數等于其中較小的數和兩數的差的最大公約數。例如,252 和 105 的最大公約數是 21;因為 252 ? 105 = 21 × (12 ? 5) = 147 ,所以 147 和 105 的最大公約數也是 21。
在這個過程中,較大的數縮小了,所以繼續進行同樣的計算可以不斷縮小這兩個數直至其中一個變成零。
這時,所剩下的還沒有變成零的數就是兩數的最大公約數。
#include<stdio.h> int main() {int x, y, z, m, n;printf("請輸入兩個數:");scanf("%d%d", &x, &y);m = x, n = y;while (y != 0) {z = x%y;x = y;y = z;}printf("最大公約數是: %d\n", x);printf("最小公倍數是: %d\n", m*n / x);return 0; }
歡迎在評論區留言。 如果這篇文章對你產生了幫助,就請給博主一個贊吧!大家的點贊是我創作的最大動力!
總結
以上是生活随笔為你收集整理的辗转相除法(欧几里得算法)求 最大公约数与最小公倍数+推论与证明。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 26行代码AC_试题 历届试题 日期问题
- 下一篇: 28行代码AC——Minimum Sum