欧几里得算法(辗转相除法)求最大公约数
- 这个算法的原理基于以下定理:两个整数的最大公约数等于其中较小的数和两数相除余数的最大公约数
#include <stdio.h>
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int multi_gcd(int a[], int n) {
int res = gcd(a[0], a[1]);
for (int i = 2; i < n; i++) {
res = gcd(res, a[i]);
}
return res;
}
int main() {
int x, y;
printf("请输入两个正整数:\n");
scanf("%d %d", &x, &y);
int result = gcd(x, y);
printf("最大公约数是:%d\n", result);
return 0;
}
求最小公倍数
- 最小公倍数(Least Common Multiple,LCM)
- 两个数的乘积等于它们的最大公约数与最小公倍数的乘积
- 求两个数的最小公倍数(LCM)可以通过它们的最大公约数(GCD)来计算。最小公倍数可以通过以下公式求得:LCM(a, b) = (a * b) / GCD(a, b)
#define _CRT_SECURE_NO_WARNINGS
#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 = 30, b = 42;
printf("%d", lcm(a, b));
return 0;
}
判断两个整数是否互质
- 0和任意自然数的最大公约数就是那个自然数。
- 互质指最大公约数等于1的两个自然数。
- 1和任意数互质。
bool isrp(int a, int b){
if(a==1||b==1)
return true;
while(1){
int t = a%b;
if(t == 0) break;
else{
a = b;
b = t;
}
}
if(b>1) return false;
else return true;
}