具體操作步驟如下:
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了貴港免費(fèi)建站歡迎大家使用!
一、新建一個(gè)C語(yǔ)言源程序,使用Visual C++6.0的軟件。
二、從鍵盤(pán)中輸入兩個(gè)正整數(shù)a和b。代碼:printf("please input two number:\n");int a,b;scanf("%d%d",a,b)。
三、取兩個(gè)數(shù)a,b中的較小值存放到變量n中。代碼:int n=a;if (nb)n=b。
四、從兩個(gè)數(shù)a和b中的較小數(shù)開(kāi)始逐個(gè)減小1,尋找能整除a和b的整數(shù)。第一個(gè)找到的整數(shù)即整數(shù)a和b的最大公約數(shù)。
五、點(diǎn)擊工具欄的如圖圖標(biāo),對(duì)源程序編譯運(yùn)行。
六、測(cè)試輸入4,6,得到最大公約數(shù)2。程序是正確的,以測(cè)試更多的數(shù)。
七、
上面面步驟是編程的思路,給出完整代碼,方便復(fù)制使用。#includestdio.hvoid main(){printf("please input two number:\n"); int a,b;;scanf("%d%d",a,b);//從鍵盤(pán)輸入兩個(gè)數(shù) int n=a; ;f (nb) n=b;//取兩個(gè)數(shù)中的較小數(shù) for(int i=n;i=1;i--) { if (a%i==0b%i==0) { printf("最大公約數(shù):%d \n",i); break;}}}。
思路:求兩個(gè)數(shù)的最大公約數(shù)使用輾轉(zhuǎn)相除法。
輾轉(zhuǎn)相除法,
又名歐幾里德算法(Euclidean
algorithm)乃求兩個(gè)正整數(shù)之最大公因子的算法。原理:兩個(gè)整數(shù)的最大公約數(shù)等于其中較小的數(shù)和兩數(shù)的差的最大公約數(shù)。
參考代碼:
#include stdio.h
int main()
{
int x,y,z;
scanf("%d%d",x,y);
while(x!=0)
{
z=x%y;
x=y;
y=z;
}
printf("%d\n",z);
return 0;
}
/*
運(yùn)行結(jié)果:
6 27
3
*/
c語(yǔ)言求最大公約數(shù)有輾轉(zhuǎn)相除法、更相減損術(shù)、窮舉法三種。
輾轉(zhuǎn)相除法。算法簡(jiǎn)介:將兩個(gè)數(shù)a,b相除,如果余數(shù)c不等于0,就把b的值給a,c的值給b,直到c等于0,此時(shí)最大公約數(shù)就是b。
更相減損術(shù)。算法簡(jiǎn)介:將兩個(gè)數(shù)中較大的數(shù)a減去較小的數(shù)b,如果差c等于0,那么最大公約數(shù)為b,如果不等于0,則將b的值給a,c的值給b,繼續(xù)相減直到差等于0。
窮舉法。算法簡(jiǎn)介:將兩個(gè)數(shù)a,b中較小的值賦給i,將a除以i,b也除以i,若兩者的余數(shù)同時(shí)為0時(shí),此時(shí)的i就是兩者的最大公約數(shù)。若不等于0,則將i-1,繼續(xù)將a除以i,b除以i,直至余數(shù)同時(shí)為0。
最大公約數(shù):
最大公因數(shù),也稱最大公約數(shù)、最大公因子,指兩個(gè)或多個(gè)整數(shù)共有約數(shù)中最大的一個(gè)。a,b的最大公約數(shù)記為(a,b),同樣的,a,b,c的最大公約數(shù)記為(a,b,c),多個(gè)整數(shù)的最大公約數(shù)也有同樣的記號(hào)。
早在公元前300年左右,歐幾里得就在他的著作《幾何原本》中給出了高效的解法——輾轉(zhuǎn)相除法。輾轉(zhuǎn)相除法使用到的原理很聰明也很簡(jiǎn)單,假設(shè)用f(x,y)表示x,y的最大公約數(shù),取k=x/y,b?=x%y,則x=ky+?b,如果一個(gè)數(shù)能夠同時(shí)整除x和y,則必能同時(shí)整除b和y。
而能夠同時(shí)整除b和y的數(shù)也必能同時(shí)整除x和y,即x和y的公約數(shù)與b和y的公約數(shù)是相同的,其最大公約數(shù)也是相同的,則有f(x,y)=f(y,x%y)(y0),如此便可把原問(wèn)題轉(zhuǎn)化為求兩個(gè)更小數(shù)的最大公約數(shù),直到其中一個(gè)數(shù)為0,剩下的另外一個(gè)數(shù)就是兩者最大的公約數(shù)。
最大公約數(shù)c語(yǔ)言編程的常用思路是:按照從大(兩個(gè)整數(shù)中較小的數(shù))到?。ǖ阶钚〉恼麛?shù)1)的順序求出第一個(gè)能同時(shí)整除兩個(gè)整數(shù)的自然數(shù),即為所求。
兩個(gè)數(shù)的最大公約數(shù)有可能是其中的小數(shù),所以在按從大到小順序找尋最大公約數(shù)時(shí),循環(huán)變量i的初值從小數(shù)n開(kāi)始依次遞減,去尋找第一個(gè)能同時(shí)整除兩整數(shù)的自然數(shù),并將其輸出。
需要注意的是,雖然判定條件是i0,但在找到第一個(gè)滿足條件的i值后,循環(huán)沒(méi)必要繼續(xù)下去,如,25和15,最大公約數(shù)是5,對(duì)于后面的4、3、2、1沒(méi)必要再去執(zhí)行,但此時(shí)判定條件仍然成立,要結(jié)束循環(huán)只能借助break語(yǔ)句。
具體代碼實(shí)現(xiàn):
#includestdio.h
int main()
{
int m,n,temp,i;
printf("Input mn:");
scanf("%d%d",m,n);
if(mn)/*比較大小,使得m中存儲(chǔ)大數(shù),n中存儲(chǔ)小數(shù)*/
{/*交換m和n的值*/
temp=m;
m=n;
n=temp;
}
for(i=n;i0;i--)/*按照從大到小的順序?qū)ふ覞M足條件的自然數(shù)*/
if(m%i==0n%i==0)
{/*輸出滿足條件的自然數(shù)并結(jié)束循環(huán)*/
printf("The GCD of%d and%d is:%d\n",m,n,i);
break;
}
return 0;
}
1、新建一個(gè)C語(yǔ)言源程序,這里使用Visual C++6.0的軟件:
2、從鍵盤(pán)中輸入兩個(gè)正整數(shù)a和b。取兩個(gè)數(shù)a,b中的較小值存放到變量n中。從兩個(gè)數(shù)a和b中的較小數(shù)開(kāi)始逐個(gè)減小1,尋找能整除a和b的整數(shù),第一個(gè)找到的整數(shù)即整數(shù)a和b的最大公約數(shù),最后將找到的結(jié)果輸出即可完成程序的編寫(xiě):
3、對(duì)源程序編譯運(yùn)行,測(cè)試輸入4、6,得到最大公約數(shù)2說(shuō)明程序是正確的,以上就是用c語(yǔ)言求最大公約數(shù)的過(guò)程:
c語(yǔ)言求最大公約數(shù)代碼:
#includestdio.h
#includewindows.h
#pragma warning(disable:4996)//因?yàn)槭莢s編譯器,不承認(rèn)scanf函數(shù),其他編譯器可忽略
int gcd(int i, int j)
{
int a;
if (i j)//交換變量值
{
a = i;
i = j;
j = a;
}
while (j != 0){
a = i % j;
i = j;
j = a;
}
return i;
}
int main()
{
int x;
int y;
scanf("%d %d", x, y);
int c = gcd(x, y);
printf("%d\n", c );
system("pause");
return 0;
}
解題分析:
極大公數(shù),也稱最大公約數(shù)、最大公因子,指兩個(gè)或更多的整數(shù)共有約數(shù)中最大的一個(gè);最小公倍數(shù)是指兩個(gè)或多個(gè)整數(shù)共同擁有的倍數(shù),稱為它們的公倍數(shù),而除0以外的最小公倍數(shù)稱為兩個(gè)整數(shù)的最小公倍數(shù)。最小公倍=兩整數(shù)的乘積=最大公約數(shù),因此如何確定最大公約數(shù)是關(guān)鍵。
由于2將 b=r1q2改為 b=r1q2,則b1r1的公約數(shù)必須是a1b公約數(shù)。因?yàn)橐粋€(gè)數(shù)可以同時(shí)除 b和r1之外,那么就必須能夠整除 a,因此,對(duì)于a1b,也就是 a的公約數(shù)。相反,如果一個(gè)數(shù) d,能夠同時(shí)整除a1b,則由1)式,就一定能整除r1,因此,它的公約數(shù) d是b1r1。