日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

最大公约数简便算法_求最大公约数的4种算法

發(fā)布時間:2023/12/3 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 最大公约数简便算法_求最大公约数的4种算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

for(z=0; z<10000000; z++) 循環(huán)只是為了增加程序的運行時間,

讓我們體會算法的時間復雜度。

算法一:短除法

想法,采用短除法找出2個數(shù)的所有公約數(shù),將這些公因子相乘,結果就是2個數(shù)的最大公約數(shù)。【找公因子,只能使用蠻力法】

#include

#include

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

for(z=0; z<10000000; z++)

{

for(i=2;i<=m&&i<=n;)

{

while(m%i==0&&n%i==0)

{

f*=i;

m/=i;

n/=i;

}

i++;

}

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

算法二:輾轉相除法

輾轉相除法, 又名歐幾里德算法(Euclidean algorithm),是求最大公約數(shù)的一種方法。它的具體做法是:用較小數(shù)除較大數(shù),再用出現(xiàn)的余數(shù)(第一余數(shù))去除除數(shù),再用出現(xiàn)的余數(shù)(第二余數(shù))去除第一余數(shù),如此反復,直到最后余數(shù)是0為止。如果是求兩個數(shù)的最大公約數(shù),那么最后的除數(shù)就是這兩個數(shù)的最大公約數(shù)。

#include

#include

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

for(z=0; z<10000000; z++)

{

if(m

{

i=m;

m=n;

n=i;

}

i=m%n;

while(i)

{

m=n;

n=i;

i=m%n;

}

f=n;

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

time=0.037000 seconds

result=4

Press any key to continue

算法三:蠻力法,從2個公約數(shù)中較小的數(shù)開始遞減,二個公約數(shù)除以它,可以同時除盡,變是最大公約數(shù),我想的,很笨的一種。

#include

#include

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

for(z=0; z<10000000; z++)

{

f=m>n?n:m;

for(i=f;i>0;i--)

{

if(m%i==0&&n%i==0)

{

f=i;

break;

}

}

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

time=0.992000 seconds

result=4

Press any key to continue

算法四:輾轉相減法

輾轉相減法是一種簡便的求出兩數(shù)最大公約數(shù)的方法。(更相減損術)輾轉相減法(求最大公約數(shù)),即尼考曼徹斯法,其特色是做一系列減法,從而求得最大公約數(shù)。例如 :兩個自然數(shù)35和14,用大數(shù)減去小數(shù),(35,14)->(21,14)->(7,14),此時,7小于14,要做一次交換,把14作為被減數(shù),即(14,7)->(7,7),再做一次相減,結果為0,這樣也就求出了最大公約數(shù)7

#include

#include

void exchange(int *m,int *n);

void main()

{

int m=28,n=72;

int i,f=1;

int z;

clock_t start,finish;

double duration;

start= clock();

if(m

exchange(&m,&n);

for(z=0; z<10000000; z++)

{

i=m-n;

while(i)

{

if(i>n)

{

m=i;

}else

{

m=n;

n=i;

}

i=m-n;

}

f=m;

}

finish=clock();

duration=(double)(finish-start)/CLOCKS_PER_SEC;

printf("time=%lf seconds\n",duration);

printf("result=%d\n",f);

}

void exchange(int *m,int *n)

{

int temp;

temp=*m;

*m=*n;

*n=temp;

}

time=0.020000 seconds

result=4

Press any key to continue

看看4個算法的運行時間,還是我自己想的算法時間最久,來一個

大神拯救我吧。

總結

以上是生活随笔為你收集整理的最大公约数简便算法_求最大公约数的4种算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。