#includestdio.h
創(chuàng)新互聯(lián)公司專注于桓仁網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供桓仁營(yíng)銷型網(wǎng)站建設(shè),桓仁網(wǎng)站制作、桓仁網(wǎng)頁(yè)設(shè)計(jì)、桓仁網(wǎng)站官網(wǎng)定制、小程序設(shè)計(jì)服務(wù),打造桓仁網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供桓仁網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
intfun(intm,intn);
intfun1(intm,intn);
voidmain(){
intm,n;
do{
scanf("%d%d",m,n);
}while(m=0||n=0);
printf("%d,%d最大公約數(shù)是%d\n",m,n,fun(m,n));
printf("%d,%d最小公倍數(shù)是%d\n",m,n,fun1(m,n));
}
intfun(intm,intn){
intr,t;
if(mn){
t=m;m=n;n=t;
}
while(n!=0){//輾轉(zhuǎn)相除法
r=m%n;
m=n;
n=r;
}
returnm;
}
intfun1(intm,intn){//暴力破解法
intresult;
for(result=1;;result++){
if(result%m==0result%n==0){
break;
}
}
returnresult;
}
擴(kuò)展資料
c語(yǔ)言求兩個(gè)整數(shù)的最大公約數(shù)
#includestdio.h
#includestdlib.h
intmain()
{
inttmp,a,b;
printf("請(qǐng)輸入兩個(gè)整數(shù):\n");
scanf("%d%d",a,b);
while(a%b!=0)
{
tmp=a%b;//取余
a=b;//交換a,b可避免a比b小
b=tmp;
}
printf("%d\n",b);
return0;
}
以下是求兩個(gè)數(shù)最大公因數(shù)的C語(yǔ)言函數(shù)。
int gcd(int a,int b)
{return b?gcd(b,a%b):a;
}
你是對(duì)原理不清楚嗎?
這個(gè)求最大公因數(shù)的算法是歐幾里得算法,其原理是gcd(a,b)=gcd(b,a%b),不斷輾轉(zhuǎn)相除,到最后一個(gè)數(shù)變成了0,那么gcd(a,0)=a,就求出了gcd。
例如:gcd(12,15)=gcd(15,12%15)=gcd(15,12)=gcd(12,15%12)=gcd(12,3)=gcd(3,12%3)=gcd(3,0)=3。
證明可以查閱相關(guān)資料,屬于數(shù)論范疇,這里不贅述。
然后是最小公倍數(shù),原理是lcm(a,b)=a*b/gcd(a,b),因?yàn)楣驍?shù)被算了兩遍,所以要除掉。
例如:lcm(12,15)=12*15/3=60。
所以代碼的意思就是:
s?=?m?*?n;?//?計(jì)算出兩個(gè)數(shù)的乘積,稍后用于計(jì)算lcm
//?計(jì)算最大公因數(shù)
while?(n?!=?0)?//?判斷是否到達(dá)?gcd(m,?0)?的情況
{
//?從?gcd(m,?n)?變?yōu)?gcd(n,?r),即?gcd(n,?m?%?n)
r?=?m?%?n;
m?=?n;
n?=?r;
}
//?現(xiàn)在是?n?=?0,所以?gcd(m,?0)?=?m
printf("GCD:?%d\n",?m);
//?計(jì)算?lcm,即原來(lái)兩數(shù)的乘積?s?除以最大公因數(shù)?m
printf("LCM:?%d\n\n",?s?/?m);
希望對(duì)你有幫助,謝謝!
第一步:比較兩數(shù)大小
第二步:用大數(shù)除以小數(shù)取余,如果為零,則最大公因數(shù)為小數(shù)
第三步:循環(huán)
?。么髷?shù)(a)除以小數(shù)(b)減i++(i初值為0)取余,如果余數(shù)不為零,則用小數(shù)除以小數(shù)減i,為零則表示小數(shù)減i就是最大公因數(shù),否則重新循環(huán),結(jié)束循環(huán)的條件是i=小數(shù)(b)
}