所謂埃及分?jǐn)?shù)分解就是將一個(gè)分?jǐn)?shù)分解成若干個(gè)分子為1的分?jǐn)?shù)之和.如“在114=1()+1()+1()+1()①的( )內(nèi)填入互不相同的自然數(shù),使等式成立”.對(duì)埃及分?jǐn)?shù)分解的研究很多[1,2],一種通行的解法是:將114的分子分母同乘14的四個(gè)約數(shù)1、2、7、14的和并加以展開.例如,114=1×2414×24=114×24+214×24+714×24+1414×24=1336+1118+148+124.這種方法稱為約數(shù)和分解法.我們知道,按約數(shù)和分解法上例的答案就只有一個(gè).但在學(xué)生的答案中,出現(xiàn)了數(shù)十個(gè)不同的正確答案.這些答案不同于上面的解法,而且找不到共性,這是否是約數(shù)和分解法呢?本文就以這個(gè)題目為例加以探究把真分?jǐn)?shù)表示為埃及分?jǐn)?shù)之和的形式,所謂的埃及分?jǐn)?shù)是指分子為1的分?jǐn)?shù)
創(chuàng)新互聯(lián)自2013年起,先為麻章等服務(wù)建站,麻章等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為麻章企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
例如:7/8=1/2+1/3+1/24;要求用最少的埃及分?jǐn)?shù)來(lái)表示
解析:設(shè)a、b為互質(zhì)正整數(shù),ab 分?jǐn)?shù)a/b 可用以下的步驟分解成若干個(gè)單位分?jǐn)?shù)之和:
步驟一: 用b 除以a,得商數(shù)q1 及余數(shù)r1。(r1=b - a*q1)
步驟二:把a(bǔ)/b 記作:a/b=1/(q1+1)+(a-r)/b(q1+1)
步驟三:重復(fù)步驟2,直到分解完畢
以上其實(shí)是 數(shù)學(xué)家 斐波那契提出的一種求解 埃及分?jǐn)?shù) 的貪心算法,準(zhǔn)確的算法表述應(yīng)該是這樣的:
設(shè)某個(gè)真分?jǐn)?shù)的分子為a,分母為b;
把b除以a的商部分加1后的值作為埃及分?jǐn)?shù)的某一個(gè)分母c;
將a乘以c再減去b,作為新的a;
將b乘以c,得到新的b;
如果a大于1且能整除b,則最后一個(gè)分母為b/a;算法結(jié)束;
或者,如果a等于1,則,最后一個(gè)分母為b;算法結(jié)束;
子為1?的分?jǐn)?shù)稱為埃及分?jǐn)?shù),現(xiàn)輸入一個(gè)真分?jǐn)?shù),請(qǐng)將該分?jǐn)?shù)分解為埃及分?jǐn)?shù)。
如:8/11=1/2+1/5+1/55+1/110。
*問(wèn)題分析與算法設(shè)計(jì)
若真分?jǐn)?shù)的分子a能整除分母b,則真分?jǐn)?shù)經(jīng)過(guò)化簡(jiǎn)就可以得到埃及分?jǐn)?shù),若真分?jǐn)?shù)的分子不能整除分母,則可以從原來(lái)的分?jǐn)?shù)中分解出一個(gè)分母為b/a+1的埃及分?jǐn)?shù)。用這種方法將剩余部分反復(fù)分解,最后可得到結(jié)果。
*程序說(shuō)明與注釋
/*注:對(duì)源程序作稍許修改,主要是添加了一個(gè)外循環(huán),可以直接計(jì)算多個(gè)真分?jǐn)?shù)的埃及分?jǐn)?shù),按Ctrl-C退出。具體的算法我沒有認(rèn)真看,有問(wèn)題請(qǐng)?zhí)岢?,謝謝*/
#include
int?main(void)
{
long?int?a,b,c;
while(true)
{
printf("Please?enter?a?optional?fraction(a/b):");
scanf("%ld/%ld",a,b);?/*輸入分子a和分母b*/
printf("It?can?be?decomposed?to:");
while(true)
{
if(b%a)?/*若分子不能整除分母*/
c=b/a+1;?/*則分解出一個(gè)分母為b/a+1的埃及分?jǐn)?shù)*/
else{?c=b/a;?a=1;}?/*否則,輸出化簡(jiǎn)后的真分?jǐn)?shù)(埃及分?jǐn)?shù))*/
if(a==1)
{
printf("1/%ld\n",c);
break;?/*a為1標(biāo)志結(jié)束*/
}
else
printf("1/%ld?+?",c);
a=a*c-b;?/*求出余數(shù)的分子*/
b=b*c;?/*求出余數(shù)的分母*/
if(a==3)?/*若余數(shù)為3,輸出最后兩個(gè)埃及分?jǐn)?shù)*/
{?printf("1/%ld?+?1/%ld\n",b/2,b);?break;}
}
}
return?0;
}
*運(yùn)行結(jié)果
Please?enter?a?optional?fraction?(a/b):?1/6
It?can?be?decomposed?to:?1/6
Please?enter?a?optional?fraction?(a/b):?20/33
It?can?be?decomposed?to:?1/2+1/10+1/165
Please?enter?a?optional?fraction?(a/b):?10/89
It?can?be?decomposed?to:?1/9+1/801
Please?enter?a?optional?fraction?(a/b):?19/99
It?can?be?decomposed?to:?1/6+1/40+1/3960
Please?enter?a?optional?fraction?(a/b):?8/87
It?can?be?decomposed?to:?1/11+1/957
……(按ctrl-c退出)
#include stdio.h
void main()
{
int a,b,c,d;
printf("please input ab:\n");
scanf("%d%d",a,b);
c=b/a+1;
printf("%d/%d=1/%d",a,b,c);
while(a!=1)
{
a=a*c-b;
b=b*c;
c=b/a+1;
if(a!=3)
printf("+1/%d",c);
else
{d=b/2;
printf("+1/%d+1/%d",d,b);
getch();
}
}
}
搞定了,你的(a!=3)條件放錯(cuò)了,呵呵,好好看看,是不?
判斷完了以后才得到的a=3;所以那個(gè)C還是要打印的。
學(xué)會(huì)分解,自己手工操作吧,
1/m=1/(m+d)+1/(m+m^2/d) d是m的因數(shù),找到一個(gè)因數(shù),就可以得到一個(gè)分解,(可能有重復(fù)的)d=1就是常用的:1/m=1/(m+1)+1/【m(m+1)】
也可以用貪心算法
新聞標(biāo)題:貪心埃及分?jǐn)?shù)函數(shù)c語(yǔ)言 C語(yǔ)言埃及分?jǐn)?shù)
本文路徑:http://jinyejixie.com/article44/dodoehe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、企業(yè)建站、網(wǎng)站導(dǎo)航、虛擬主機(jī)、網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)