常見演算法:C語言求最小公倍數和最大公約數三種演算法

來源:互聯網
上載者:User

標籤:

最小公倍數:數論中的一種概念,兩個整數公有的倍數成為他們的公倍數,當中一個最小的公倍數是他們的最小公倍數,相同地,若干個整數公有的倍數中最小的正整數稱為它們的最小公倍數,維基百科:定義點擊開啟連結

求最小公倍數演算法:

最小公倍數=兩整數的乘積÷最大公約數

求最大公約數演算法:

(1)輾轉相除法

有兩整數a和b:

① a%b得餘數c

② 若c=0,則b即為兩數的最大公約數

③ 若c≠0,則a=b,b=c,再回去運行①

比如求27和15的最大公約數過程為:

27÷15 餘1215÷12餘312÷3餘0因此,3即為最大公約數

#include<stdio.h>void main()   /*  輾轉相除法求最大公約數 */ {    int m, n, a, b, t, c;   printf("Input two integer numbers:\n");   scanf("%d%d", &a, &b);   m=a;   n=b;   while(b!=0)  /* 餘數不為0,繼續相除,直到餘數為0 */    { c=a%b; a=b;  b=c;}   printf("The largest common divisor:%d\n", a);   printf("The least common multiple:%d\n", m*n/a);}

⑵ 相減法

有兩整數a和b:

① 若a>b,則a=a-b

② 若a<b,則b=b-a

③ 若a=b,則a(或b)即為兩數的最大公約數

④ 若a≠b,則再回去運行①

比如求27和15的最大公約數過程為:

27-15=12( 15>12 ) 15-12=3( 12>3 )

12-3=9( 9>3 ) 9-3=6( 6>3 )

6-3=3( 3==3 )

因此,3即為最大公約數

#include<stdio.h>void main ( )  /* 相減法求最大公約數 */{     int m, n, a, b, c;   printf("Input two integer numbers:\n");   scanf ("%d,%d", &a, &b);m=a; n=b;      /* a, b不相等,大數減小數,直到相等為止。*/    while ( a!=b)          if (a>b)  a=a-b;      else  b=b-a;   printf("The largest common divisor:%d\n", a);   printf("The least common multiple:%d\n", m*n/a);}

⑶窮舉法

有兩整數a和b:

① i=1

② 若a,b能同一時候被i整除,則t=i

③ i++

④ 若 i <= a(或b),則再回去運行②

⑤ 若 i > a(或b),則t即為最大公約數,結束

改進:

① i= a(或b)

② 若a,b能同一時候被i整除,則i即為最大公約數,

結束

③ i--,再回去運行②

有兩整數a和b:

① i=1

② 若a,b能同一時候被i整除,則t=i

③ i++

④ 若 i <= a(或b),則再回去運行②

⑤ 若 i > a(或b),則t即為最大公約數,結束

改進:

① i= a(或b)

② 若a,b能同一時候被i整除,則i即為最大公約數,

結束

③ i--,再回去運行②

#include<stdio.h>void main ()  /* 窮舉法求最大公約數 */{     int  m, n, a, b, i, t;   printf("Input two integer numbers:\n");   scanf ("%d,%d", &a, &b);m=a;  n=b;    for (i=1; i<= a; i++)         if ( a%i == 0 && b%i ==0 )    t=i;   printf("The largest common divisor:%d\n", t);   printf("The least common multiple:%d\n", m*n/t);} /*  改進後的   for (t= a; t>0; t-- )           if ( a%t == 0 && b%t ==0 )    break; */

//窮舉法求最小公倍數     for (i= a; ; i++ )         if ( i % a == 0 && i % b ==0 )     break;     printf("The least common multiple:%d\n", i ) //多個數的最大公約數和最小公倍數     for (i= a; i>0; i-- )         if (a%i==0&&b%i==0&&c%i==0)     break;     printf("The largest common divisor:%d\n", i);     for (i= a; ; i++ )         if (i%a==0&&i%b==0&&i% c==0)    break;     printf("The least common multiple:%d\n", i )


常見演算法:C語言求最小公倍數和最大公約數三種演算法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.