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