最大公約數(shù)和最小公倍數(shù)Java源程序_第1頁
最大公約數(shù)和最小公倍數(shù)Java源程序_第2頁
最大公約數(shù)和最小公倍數(shù)Java源程序_第3頁
最大公約數(shù)和最小公倍數(shù)Java源程序_第4頁
最大公約數(shù)和最小公倍數(shù)Java源程序_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

//求長整型數(shù)a和長整型數(shù)b的最大公約數(shù)和最小公倍數(shù),Test類為主類classGreatestCommonDivisor//求長整型數(shù)a和長整型數(shù)b的最大公約數(shù),同時輸出a和b的所有約數(shù){ privatelonga; privatelongb; privateDivisoraDivisor; privateDivisorbDivisor; GreatestCommonDivisor() { a=1; b=1; aDivisor=newDivisor(); bDivisor=newDivisor(); } GreatestCommonDivisor(longa,longb) { this.a=a; this.b=b; aDivisor=newDivisor(a); bDivisor=newDivisor(b); } publicvoidsetA(longa) { this.a=a; } publiclonggetA() { returna; } publicvoidsetB(longb) { this.b=b; } publiclonggetB() { returnb; } publicvoidsetADivisor(DivisoraDivisor) { this.aDivisor=aDivisor; } publicDivisorgetADivisor() { returnaDivisor; } publicvoidsetBDivisor(DivisorbDivisor) { this.bDivisor=bDivisor; } publicDivisorgetBDivisor() { returnbDivisor; } /* *直接求兩個數(shù)a和b的最大公約數(shù),用較大數(shù)依次除以較小數(shù)的所有約數(shù),其中最大的約數(shù)即為最大公約數(shù) *即用較小數(shù)的所有約數(shù),包括較小數(shù)本身,按照從大到小的順序依次去除較大數(shù) *第一個能把較大數(shù)除盡的數(shù)就是最大公約數(shù) publiclonggetGreatestCommonDivisor() { longresult=1; longn=0; if(a==0) { result=b; } elseif(b==0) { result=a; } else { longabsA=1; longabsB=1; longlittleNumber=1; longbigNumber=1; absA=Math.abs(a); absB=Math.abs(b); if(absA<absB) { littleNumber=absA; bigNumber=absB; } else { littleNumber=absB; bigNumber=absA; } //System.out.println("littleNumber="+littleNumber); //System.out.println("bigNumber="+bigNumber); longi=littleNumber; while(i>1) { if(bigNumber%i==0) { break; } else { do { i--; }while(littleNumber%i!=0); if(bigNumber%i==0) { break; } } } if(a<0&&b<0) { result=-i; } elseif(a>0&&b>0) { result=i; } else { result=1; } } returnresult; } */ publiclonggetGreatestCommonDivisor() { longresult=1; if(getA()==0) { if(getB()!=0) { result=getB();//定義0與另一個非零數(shù)a的最大公約數(shù)GCD(0,a)=a } else { result=1;//定義0與0的最大公約數(shù)GCD(0,0)=1 } } elseif(getB()==0) { if(getA()!=0) { result=getA();//定義0與另一個非零數(shù)a的最大公約數(shù)GCD(0,a)=a } else { result=1;//定義0與0的最大公約數(shù)GCD(0,0)=1 } } else//求兩個非零數(shù)的最大公約數(shù) { longcommonDivisor[]; commonDivisor=aDivisor.getCommonDivisor(bDivisor); for(inti=1;i<(int)commonDivisor[0];i++) { if(result<commonDivisor[i]) { result=commonDivisor[i]; } } if(getA()<0&&getB()<0) { result=-result;//兩個負(fù)數(shù)的最大公約數(shù)是負(fù)數(shù) } elseif(getA()>0&&getB()>0)//兩個正數(shù)的最大公約數(shù)已經(jīng)求出,不做處理 { } else { result=1;//兩個異號數(shù)的最大公約數(shù)是1 } } returnresult; } publicvoiddisplayGreatestCommonDivisor() { System.out.println(getA()+"和" +getB()+"的最大公約數(shù)是:" +getGreatestCommonDivisor()); }}classDivisor//求長整型a的所有約數(shù){ privatelonga; privatelongdivisor[]; privatefinalintMAXIMUMINDEXOFDIVISOR=10000; Divisor() { a=1; divisor=newlong[MAXIMUMINDEXOFDIVISOR]; divisor[0]=1; divisor[1]=1; for(inti=2;i<MAXIMUMINDEXOFDIVISOR;i++) { divisor[i]=1; } } Divisor(longa) { if(a>=0) { a=a; } else { a=-a; } this.a=a; divisor=newlong[MAXIMUMINDEXOFDIVISOR]; divisor[0]=1; divisor[1]=1; intindex=2;//數(shù)字a的約數(shù)的順序號 for(longj=2;j<=getA();j++) { if(getA()%j==0) { divisor[index]=j; System.out.printf("divisor[index]=%5d\t",divisor[index]); index++; } } index--; divisor[0]=index; System.out.printf("divisor[0]=%5d\n",divisor[0]); for(intj=index+1;j<MAXIMUMINDEXOFDIVISOR;j++) { divisor[j]=1; } } publicvoidsetA(longa) { if(a>=0) { this.a=a; } else { this.a=-a; } } publiclonggetA() { returna; } publicvoidsetDivisor() { divisor[0]=1; divisor[1]=1; intindex=1;//屬性a的約數(shù)的順序號 for(longj=2;j<=getA();j++) { if(getA()%j==0) { index++; divisor[index]=j; } } divisor[0]=index; for(intj=index+1;j<MAXIMUMINDEXOFDIVISOR;j++) { divisor[j]=1; } } publiclong[]getDivisor() { returndivisor; } publiclong[]getCommonDivisor(DivisoraDivisor)//求本對象的成員變量a和另一個類Divsior型對象中的成員變量a的所有公約數(shù) { long[]result=newlong[MAXIMUMINDEXOFDIVISOR]; longotherDivisor[]=aDivisor.getDivisor(); intlittleIndex=(int)(divisor[0]<otherDivisor[0]?divisor[0]:otherDivisor[0]); intbigIndex=(int)(divisor[0]>otherDivisor[0]?divisor[0]:otherDivisor[0]); //System.out.printf("littleIndex=%5d\tbigIndex=%5d\t",littleIndex,bigIndex); intcommonDivisorIndex=1; result[0]=1; result[1]=1; for(inti=2;i<=littleIndex;i++) { for(intj=2;j<=bigIndex;j++) { if(divisor[i]==otherDivisor[j]) { commonDivisorIndex++; result[commonDivisorIndex]=divisor[i]; } } } result[0]=commonDivisorIndex; for(intj=commonDivisorIndex+1;j<MAXIMUMINDEXOFDIVISOR;j++) { result[j]=1; } returnresult; } publicvoiddisplayDivisor() { longaDivisor[]; aDivisor=getDivisor(); System.out.println(getA()+"有"+aDivisor[0]+"個約數(shù),分別是:"); for(inti=1;i<=aDivisor[0];i++) { System.out.printf("\t%10d",aDivisor[i]); } }}classLeastCommonMultiple//求成員變量a和成員變量b的最小公倍數(shù){ privatelonga; privatelongb; LeastCommonMultiple() { a=1; b=1; } LeastCommonMultiple(longa,longb) { this.a=a; this.b=b; } publicvoidsetA(longa) { this.a=a; } publiclonggetA() { returna; } publicvoidsetB(longb) { this.b=b; } publiclonggetB() { returnb; } publiclonggetLeastCommonMultiple() { GreatestCommonDivisorgCD=newGreatestCommonDivisor(a,b); longresult=1; if(a==0&&b==0)//定義0和一個數(shù)a的最小公倍數(shù)LCM(0,a)=0 { result=0; } else { result=a*b/gCD.getGreatestCommonDivisor(); } returnresult; } publicvoiddisplayLeastCommonMultiple() { System.out.println(getA()+"和" +getB()+"的最小公倍數(shù)是:" +getLeastCommonMultiple()); }}publicclassTest{ publicstaticvoidmain(String[]args) { GreatestCommonDivisorgCD=newGreatestCommonDivisor(40,60); gCD.displayGreatestCommonDivisor(); LeastCommonMultipleleastCommonMultiple=newLeastCommonMultiple(gCD.getA(),gCD.getB()); leastCommonMultiple.displayLeastCommonMultiple(); /* Grea

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論