最小公倍數的求解
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;
}