求2121212和1212121的最大公约数,它们都是十进制数,用辗转相除法
时间: 2024-02-22 12:57:53 浏览: 14
我们可以使用辗转相除法来求解2121212和1212121的最大公约数:
```
2121212 ÷ 1212121 = 1 ... 909991
1212121 ÷ 909991 = 1 ... 302130
909991 ÷ 302130 = 3 ... 53
302130 ÷ 53 = 5700 ... 30
53 ÷ 30 = 1 ... 23
30 ÷ 23 = 1 ... 7
23 ÷ 7 = 3 ... 2
7 ÷ 2 = 3 ... 1
2 ÷ 1 = 2 ... 0
```
因为最后的余数为0,所以1212121和2121212的最大公约数就是除数2,即2。
相关问题
c语言:用辗转相除法求两个数的最大公约数和最小公倍数
辗转相除法(又称欧几里德算法)是求两个数的最大公约数的常用方法。其基本思想是利用两数的除法余数性质,不断用较小的数去除较大的数,直到余数为0,此时较小的数就是最大公约数。最小公倍数则可以通过最大公约数和两个数的乘积来求得。下面是C语言代码实现:
```c
#include <stdio.h>
// 计算两个数的最大公约数
int gcd(int a, int b) {
int r;
// 辗转相除法
while (b != 0) {
r = a % b;
a = b;
b = r;
}
return a;
}
// 计算两个数的最小公倍数
int lcm(int a, int b) {
int g = gcd(a, b);
return a * b / g;
}
int main() {
int a, b;
printf("请输入两个正整数:\n");
scanf("%d%d", &a, &b);
printf("%d和%d的最大公约数为%d,最小公倍数为%d\n", a, b, gcd(a, b), lcm(a, b));
return 0;
}
```
在程序中,我们定义了两个函数gcd和lcm,分别用于计算最大公约数和最小公倍数。在gcd函数中,我们使用了辗转相除法,不断用b去除a,然后用a除以余数r,直到r为0,此时a就是最大公约数。在lcm函数中,我们先计算出最大公约数g,然后用a和b的乘积除以g,就可以得到最小公倍数。最后在主函数中,我们读入用户输入的两个整数a和b,然后调用gcd和lcm函数,输出结果即可。
需要注意的是,上述代码中并没有对用户输入的数据进行合法性检查,输入的数应该是正整数,否则程序可能会出现错误。
C语言用辗转相除法求最大公约数和最小公倍数
最大公约数和最小公倍数可以通过辗转相除法来求解。
辗转相除法,也叫欧几里得算法,是求最大公约数的一种方法。其基本思想是:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。即,设两数为a、b(a>b),它们的最大公约数设为gcd(a,b),根据辗转相除法,有:
gcd(a,b) = gcd(b,a%b)
当a%b=0时,b即为所求的最大公约数。
最小公倍数是指两个或多个整数公有的倍数中最小的一个。可以通过最大公约数来求解。设两数为a、b(a>b),它们的最小公倍数设为lcm(a,b),则有:
lcm(a,b) = a * b / gcd(a,b)
下面是用C语言实现辗转相除法求最大公约数和最小公倍数的代码:
```c
#include <stdio.h>
// 辗转相除法求最大公约数
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
// 求最小公倍数
int lcm(int a, int b) {
return a * b / gcd(a, b);
}
int main() {
int a, b;
printf("请输入两个整数:");
scanf("%d%d", &a, &b);
printf("它们的最大公约数为:%d\n", gcd(a, b));
printf("它们的最小公倍数为:%d\n", lcm(a, b));
return 0;
}
```