用c实现编程计算同余组{x ≡b1(mod m1)x ≡b2(mod m2
时间: 2023-06-01 17:02:21 浏览: 82
#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 b1, m1, b2, m2;
printf("请输入x ≡ b1(mod m1)和x ≡ b2(mod m2)的参数:\n");
scanf("%d %d %d %d", &b1, &m1, &b2, &m2);
int m = lcm(m1, m2); // 求出m1和m2的最小公倍数
int a1 = m / m1, a2 = m / m2; // 计算a1和a2
int c1 = 1, c2 = 1;
while ((c1 * a1) % m2 != 1) { // 求解c1,使得c1 * a1 ≡ 1(mod m2)
c1++;
}
while ((c2 * a2) % m1 != 1) { // 求解c2,使得c2 * a2 ≡ 1(mod m1)
c2++;
}
int x = (b1 * c1 * a2 + b2 * c2 * a1) % m; // 求出x
printf("x = %d\n", x);
return 0;
}
阅读全文