兩種方法求最大公約數最小公倍數,公約數最小公倍數
<pre name="code" class="cpp">/**coyright(c)2014 龍城無淚*All rights reserved*檔案名稱 digui.c*作者:封塵之魂*完成日期:20141108*版本號碼V1.0*問題描述:求兩個整數的最大公約數最小公倍數*輸入描述:輸入兩個整數*輸出描述:成功輸出最大公約數最小公倍數*/#include<stdio.h>int main(){int m,n,q,t,j,k;scanf("%d%d",&m,&n);j=m;k=n;if(m<n)//比較大小 {t=m;m=n;n=t;}q=m%n;while(q)//輾轉相除法 {m=n;n=q;q=m%n;}printf("%d %d",n,j*k/n); }
第二種迴圈
#include<stdio.h>int z(int a, int b){return b==0?a:z(b, a%b);//遞迴判斷}int main(){int a,b,m;scanf("%d%d",&a,&b);m=z(a,b);printf("%d %d", m,a*b/m);}
心得:一般來說用迴圈解決的問題都能用遞迴解決 要多運用遞迴來解決迴圈的問題來鍛煉自己的思維問題
方法:代替 要熟練的掌握替換之法 把沒用過量賦值給用過的量,實現自己想要達到的目標
怎找最小公倍數與最大公約數
最小公倍數
幾個數公有的倍數叫做這幾個數的公倍數,其中最小的一個叫做這幾個數的最小公倍數。
最小公倍數的表示:
數學上常用方括弧表示。如[12,18,20]即12、18和20的最小公倍數。
最小公倍數的求法:
求幾個自然數的最小公倍數,有兩種方法:
(1)分解質因數法。先把這幾個數分解質因數,再把它們一切公有的質因數和其中幾個數公有的質因數以及每個數的專屬的質因數全部連乘起來,所得的積就是它們的最小公倍數。
例如,求[12,18,20],因為12=2^2×3,18=2×3^2,20=2^2×5,其中三個數的公有的質因數為2,兩個數的公有質因數為2與3,每個數專屬的質因數為5與3,所以,[12,18,20]=2^2×3^2×5=180。(可用短除法計算)
(2)公式法。由於兩個數的乘積等於這兩個數的最大公約數與最小公倍數的積。即(a,b)×[a,b]=a×b。所以,求兩個數的最小公倍數,就可以先求出它們的最大公約數,然後用上述公式求出它們的最小公倍數。
例如,求[18,20],即得[18,20]=18×20÷(18,20)=18×20÷2=180。求幾個自然數的最小公倍數,可以先求出其中兩個數的最小公倍數,再求這個最小公倍數與第三個數的最小公倍數,依次求下去,直到最後一個為止。最後所得的那個最小公倍數,就是所求的幾個數的最小公倍數。
最大公約數
指某幾個整數共有因子中最大的一個。
例如,12和30的公約數有:1、2、3、6,其中6就是12和30的最大公約數。
兩個整數的最大公約數主要有兩種尋找方法:
* 兩數各分解質因子,然後取出同樣有的項乘起來
* 輾轉相除法(擴充版)
和最小公倍數(lcm)的關係:gcd(a, b)×lcm(a, b) = ab
兩個整數的最大公因子可用於計算兩數的最小公倍數,或分數化簡成最簡分數。
兩個整數的最大公因子和最小公倍數中存在分配律:
* gcd(a, lcm(b, c)) = lcm(gcd(a, b), gcd(a, c))
* lcm(a, gcd(b, c)) = gcd(lcm(a, b), lcm(a, c))
在座標裡,將點(0, 0)和(a, b)連起來,通過整數座標的點的數目(除了(0, 0)一點之外)就是gcd(a, b)。
最大公約數與最小公倍數的數學法
將每個數用2、3、5、7等素因子(不能再分解為其他兩個正整數的自然數)的乘積,最大公約數就是相同素因子的乘積;而最小公倍數則是相同的取一次,和其他所有的素因子的乘積。
例:40=2*2*2*5
30=2*3*5
最大公約數:兩個式子中都有一個2和5,所有最大公約數就是2*5=10.
最小公倍數:2和5隻取一次,其他還有2、2和3;所有最小公倍數是2*5*2*2*3=120.