C語言求最小公倍數和最大公約數四種算法(經典)


求最小公倍數的算法:

最小公倍數=兩整數的乘積÷最大公約數 。 所以該問題可以轉化為求最大公約數的算法。

求最大公約數的四種算法:

1. 輾轉相除法 :
  1. a%b得余數c
  2. 如果c = 0,則b為最大公約數
  3. 如果c不等於0,則a = b,b = c繼續執行步驟1。
#include<stdio.h>
int 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);
}

還有一種簡寫方式:

int gcd(int a,int b)
{
    if (b==0) 
        return a;
    return gcd(b, a%b);
}
2.  相減法:
  1. 若a>b,則a=a-b
  2. 若a < b,則b=b-a
  3. 若a=b,則a(或b)即為兩數的最大公約數
  4. 若a≠b,則再回去執行1
#include<stdio.h>
int 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);
}

4.枚舉法:
已知1是一個公約數,但是1不是最大公約數,所以可以檢測K=2,3,4…..是否為n1和n2的公約數,直到k大於n1或者n2。將公約數存儲在gcd的變量中,gcd初值設為1

int gcd = 1;
for(int k = 2;k <= n1&&k <= n2;k++){
    if(n1 % k == 0&& n2 % k == 0)
        gcd = k;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM