最小公倍數與最大公約數的求解(c語言)


最小公倍數的求解

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


2、窮舉法

  • i = 0
  • 若i能同時被a,b整除,則i即為最小公約數,
  • 否則 i++,再回去執行第二步
    代碼如下
int main()}{
  int a,b,c;
  scanf("%d %d", &a, &b);
  int i;
  for(i = 0; ;i++){
    if(i%a == 0 && i%b == 0) break;
  }
/*
  for (i = 0; i > 0; i--)
    if ( i%a == 0 && i%b == 0 && i%c == 0)    break;//多個數也可以求,只需增加判斷條件。
*/
  printf("The least common multiple  %d\n", i);
  return 0;
}

最大公約數的求解

最大公約數主要使用三個方法:

  • 輾轉相除法(包括使用遞歸的方法)
  • 相減法
  • 窮舉法

輾轉相除法

大致思路

  • a%b得余數c
  • 若c=0,則b即為兩數的最大公約數
  • 若c≠0,則a=b, b=c(a取b原來的值,b取余數),再回去執行第一步
    不使用遞歸寫法如下
#include<stdio.h>
int main(){
  int a,b,c;
  scanf("%d %d", &a, &b);
  while(b!=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); //最大公約數與最小公倍數相乘等於兩數乘積
  return 0;
}

遞歸寫法如下

int gcd(int a, int b){
    return b==0 ? a : gcd(b, a%b);
}

相減法

大致思路

  • 若a>b,則a=a-b
  • 若a<b,則b=b-a
  • 若a=b,則a(或b)即為兩數的最大公約數
  • 若a≠b,則再回去執行第一步
    代碼如下
#include<stdio.h>
int main (){
  int a, b;
  scanf("%d %d", &a, &b);
  while(a != b){
    if(a > b) a = a-b;
    else b = b-a;
  }
  printf("The largest common divisor  %d\n", a);
  return 0;
}

窮舉法

從兩個數中小的那個開始向下窮舉,直到滿足條件。

  • i = a(或b)
  • 若a,b能同時被i整除,則i即為最大公約數,
  • 否則 i--,再回去執行第二步
int main(){
  int a, b;
  scanf("%d %d", &a, &b);
  int t;
  for (t = a; t > 0; t--)
    if ( a%t == 0 && b%t == 0 )    break;
/*
  for (t = a; t > 0; t--)
    if ( a%t == 0 && b%t == 0 && c%t == 0)    break;//多個數也可以求,只需增加判斷條件。
*/
  printf("The largest common divisor  %d\n", t);
  return 0;
}


免責聲明!

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



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