一、輾轉(zhuǎn)相除法(歐幾里得算法)1、定義:所謂輾轉(zhuǎn)相除法,就是對于給定的兩個數(shù),用較大的數(shù)除以較小的數(shù)。若余數(shù)不為零,則將余數(shù)和較小的數(shù)構(gòu)成新的一對數(shù),繼續(xù)上面的除法,直到大數(shù)被小數(shù)除盡,則這時較小的數(shù)就是原來兩個數(shù)的最大公約數(shù)。
最大公約數(shù)與最小公倍數(shù)的求解是很多初學(xué)C的人所面臨的一個問題,接下來為大家提供方法。
問題:
請從鍵盤上輸入兩個數(shù)值 x,y,請用C語言求出這兩個數(shù)值的最大公約數(shù)與最小公倍數(shù)。
int divisor (int a,int b) /*自定義函數(shù)求兩數(shù)的最大公約數(shù)*/ { int temp; /*定義整型變量*/ if(a
最大公因數(shù);也稱最大公約數(shù)、最大公因子,指兩個或多個整數(shù)共有約數(shù)中最大的一個。
#include void main(){int m,n,k;scanf("%d%d",&m,&n);while(n) {k=m%n;m=n;n=k;}printf("%d",m);}
最小公倍數(shù):兩個或多個整數(shù)公有的倍數(shù)叫做它們的公倍數(shù)。
舉個例子你就懂了: 用輾轉(zhuǎn)相除法或更相減損術(shù)求324,243,135的最大公約數(shù) 先求兩個較大數(shù)324與243的最大公約數(shù) 324/243=181 243/81=3 知324與243的最大公約數(shù)是81 或 324-243=81 243-81=162 162-81=81 知324與243的最大公約數(shù)是81 再求81與較
輾轉(zhuǎn)相除法
又名歐幾里德算法(Euclidean algorithm),它是已知最古老的算法, 其可追溯至公元前300年前。輾轉(zhuǎn):望文生義,就是翻來覆去。相除就很好理解了,就是進(jìn)行除法運(yùn)算。輾轉(zhuǎn)相除法的核心就是不斷的讓兩個數(shù)做除法運(yùn)算。其原理基于兩個整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的相除余數(shù)的最大公約數(shù)。假設(shè)兩數(shù)為 x,y。先令 z = x % y ;之后 y 賦給 x 即令x = y ;再將 z 賦給 y 即令y = z;輾轉(zhuǎn)相減,其終止條件為:y 等于0時。
輾轉(zhuǎn)相除法,是求兩個正整數(shù)之最大公因子的算法。 輾轉(zhuǎn)相除法的算法過程如下:設(shè)兩數(shù)為a、b(a>b),求a和b最大公約數(shù)(a,b)的步驟如下:用a除以b,得 a÷b=q,余數(shù)r1(0≤r1)。若r1=0,則(a,b)=b;若r1不等于0,則再用b除以r1,得b÷r1=q,余數(shù)r2 (0
代碼如下:
輾轉(zhuǎn)相減法
即尼考曼徹斯法,其特色是做一系列減法,從而求得最大公約數(shù)。輾轉(zhuǎn)相減法即通過對兩數(shù)的不斷減法運(yùn)算。假設(shè)兩數(shù)為 x, y。當(dāng) x > y 時,令 x = x - y;反之,則令 y = y - x;之后一直輾轉(zhuǎn)相減,直至 x = y 時,終止。
輾轉(zhuǎn)相除法求兩個數(shù)a和b的最大公約程序如下: 程式解析如下: 設(shè)兩數(shù)為a、b(b1),則m=kn+xd=kyd+xd=(ky+x)d,則a=mc=(ky+x)dc,b=nc=ycd,故a與b最大公約數(shù)成為cd,而非c】 從而可知(b,r)=c,繼而(a,b)=(b,r)。 證畢。 擴(kuò)展資料VB語
代碼如下:
窮舉法
窮舉法的基本思想是根據(jù)題目的部分條件確定答案的大致范圍,并在此范圍內(nèi)對所有可能的情況逐一驗(yàn)證,直到全部情況驗(yàn)證完畢。窮舉法又稱枚舉法,通過對數(shù)值范圍內(nèi)的所有數(shù)字進(jìn)行檢驗(yàn),得出其結(jié)果。
可用遞歸來求。 推薦以下代碼: #includeint (int a,int b) //求最大公約數(shù)函數(shù){if (a%b==0) return b;else return (b,a%b); //輾轉(zhuǎn)相除法}void main(){int a,b;scanf("%d%d",&a,&b);printf("%dn",(a,b));}
代碼如下:
擴(kuò)展閱讀,以下內(nèi)容您可能還感興趣。
輾轉(zhuǎn)相除法為什么能求最大公約數(shù)
可以維基、百度百科,
簡單來說,被除數(shù)被分成了兩坨,一坨可以被整除,一坨是余數(shù),現(xiàn)在都可以被整除的玩意必然也可以被最后的最大公約數(shù)整除,所以只用找余數(shù)與除數(shù)的最大公因數(shù),然后同理,余數(shù)與除數(shù)又分別成了被除數(shù)和除數(shù),直至最后整除
編程一個C語言程序,輸入兩個數(shù),采用輾轉(zhuǎn)相除法來計算最大公約數(shù)
可以參考下面的代碼:
#include <stdio.h>
int main()
{
int m, n, r;
scanf ("%d%d", &m, &n);
if (m>n){r=m, m=n, n=r;}
r=n%m;
while (r!=0){
n = m;
m = r;
r = n%m;
}
printf ("%dn", m);
return 0;
}
擴(kuò)展資料:
函數(shù) scanf() 是從標(biāo)準(zhǔn)輸入流stdin(標(biāo)準(zhǔn)輸入設(shè)備,一般指向鍵盤)中讀內(nèi)容的通用子程序,可以說明的格式讀入多個字符,并保存在對應(yīng)地址的變量中。
函數(shù)的第一個參數(shù)是格式字符串,它指定了輸入的格式,并按照格式說明符解析輸入對應(yīng)位置的信息并存儲于可變參數(shù)列表中對應(yīng)的指針?biāo)肝恢谩C恳粋€指針要求非空,并且與字符串中的格式符一一順次對應(yīng)。
參考資料來源:百度百科-scanf (計算機(jī)語言函數(shù))
參考資料來源:百度百科-while (循環(huán)語句及英文單詞)
c語言用輾轉(zhuǎn)相除法求最大公約數(shù)
你沒發(fā)圖我不知道你的程序有什么問題,給出我的代碼:#include<stdio.h>
int *(int a,int b){
return a%b?*(b,a%b):b;
}
int main(){
printf("%d",*(4,6));
return 0;
}
運(yùn)行結(jié)果:更多追問追答追問不好意思,忘記發(fā)圖了追答看不清。。追問哦哦,我已經(jīng)知道自己錯哪了,但是不知道為什么錯#include
int main()
{
int a,b,rem;
int *;
printf("Enter 2 integers:");
scanf("%d,%d",&a,&b);
....
}
運(yùn)行時我輸入a和b中間用的是空格,而不是逗號,所以錯了,但是為什么是個負(fù)數(shù)呢。。。我輸入125 45
然后結(jié)果是-5應(yīng)該是5才對啊
為啥輾轉(zhuǎn)相除法可以求最大公約數(shù)
輾轉(zhuǎn)相除法求最大公約數(shù)原理:
設(shè)兩數(shù)為a、b(a>b),用*(a,b)表示a,b的最大公約數(shù),r=a (mod b) 為a除以b的余數(shù),k為a除以b的商,即a÷b=k.......r。輾轉(zhuǎn)相除法即是要證明*(a,b)=*(b,r)。
第一步:令c=*(a,b),則設(shè)a=mc,b=nc
第二步:根據(jù)前提可知r =a-kb=mc-knc=(m-kn)c
第三步:根據(jù)第二步結(jié)果可知c也是r的因數(shù)
第四步:可以斷定m-kn與n互質(zhì)(假設(shè)m-kn=xd,n=yd (d>1),則m=kn+xd=kyd+xd=(ky+x)d,則a=mc=(ky+x)cd,b=nc=ycd,則a與b的一個公約數(shù)cd>c,故c非a與b的最大公約數(shù),與前面結(jié)論矛盾),因此c也是b與r的最大公約數(shù)。
從而可知*(b,r)=c,繼而*(a,b)=*(b,r)。
證畢。
以上步驟的操作是建立在剛開始時r≠0的基礎(chǔ)之上的。即m與n亦互質(zhì)。
給我講一下用短除法和輾轉(zhuǎn)相除法求最大公約數(shù)
輾轉(zhuǎn)相除法:
要求a、b兩個整數(shù)的最大公約數(shù),a>b,那么我們先用a除以b,得到商 q1,余數(shù)r1:a÷b=q1…r1我們當(dāng)然也可以把上面這個式子改寫成乘法式:
a=b * q1+r1
如果r1=0,那么b就是a、b的最大公約數(shù)3。要是r1≠0,就繼續(xù)除,用b除以r1,我們也可以有和上面一樣的式子:
b=r1q2+r2
如果余數(shù)r2=0,那么r1就是所求的最大公約數(shù)3。因?yàn)槿绻鸼=r1q2+r2變成了b=r1q2,那么b1r1的公約數(shù)就一定是a1b的公約數(shù)。這是因?yàn)橐粋€數(shù)能同時除盡b和r1,那么由a=b * q1+r1,就一定能整除a,從而也是a1b的公約數(shù)。
反過來,如果一個數(shù)d,能同時整除a1b,那么由1)式,也一定能整除r1,從而也有d是b1r1的公約數(shù)。
這樣,a和b的公約數(shù)與b和r1的公約數(shù)完全一樣,那么這兩對的最大公約數(shù)也一定相同。那b1r1的最大公約數(shù),在r1=0時,不就是r1嗎?所以a和b的最大公約數(shù)也是r1了。
如果r2不是0,用r1除以r2,……直到余數(shù)為零為止。
短除法
如例子:
2|_18__30__
3|_9__15__
3 5
其實(shí)短除法就是放到一起慢慢約分,對于簡單的還有效,而大一點(diǎn)的數(shù)還是輾轉(zhuǎn)相除法比較有效,而且輾轉(zhuǎn)相除法的邏輯性也為計算機(jī)編程提供了條件
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com