1、 求解7654*x=2389mod65537
2、 在整数范围内,求x,y使之满足23456X+987654Y=2
3、求23456和987654的最小公倍数
#include<iostream>
using namespace std;
int main() {
int ch;
cout << "请选择模式:\n";
cout << "1.同余运算\n";
cout << "2.扩展欧几里得算法\n";
cout << "3.求最小公倍数\n";
cin >> ch;
if (ch == 1) {
long a, b, x, m, t = 0, y;
int i;
cout << "a * x = b mod m\n";
cout << "请输入a=";
cin >> a;
cout << "请输入b=";
cin >> b;
cout << "请输入m=";
cin >> m;
for (x = 1; t != b; x++) {
y = a * x;
t = y % m;
}
x = x - 1;
cout << "x=" << x << "\n";
}
else if (ch == 2) {
long x[1000], y[1000];
int i, j, q[1000], p[1000], t[1000];
x[0] = 1, x[1] = 0;
y[0] = 0, y[1] = 1;
cout << "请由大到小输入a,b";
cin >> t[0] >> t[1];
cout<<endl;
if (t[0] >= t[1]) {
cout<<"qi分别为:";
for (i = 1; t[i] != 0; i++) {//按从大到小录入每一步欧几里得算法得到的结果,找到最大公因数后停止。
q[i] = t[i - 1] / t[i];
t[i + 1] = t[i - 1] % t[i];
cout<<q[i]<<" ";
}
cout<<endl;
for (j = 2; j < i; j++) {
x[j] = x[j - 2] - q[j-1] * x[j - 1];
y[j] = y[j - 2] - q[j-1] * y[j - 1];
}
cout<<"满足条件的x,y分别是x="<<x[j-1]<<",y="<<y[j-1]<<endl;
}
else {
cout << "程序错误\n";
}
}
else if (ch == 3) {
long i, t = 1;
long long a, b, x;
cout << "请输入待求最小公倍数的两个数:";
cin >> a >> b;
if (a > b) {
for (i = 2; t != 0; i++) {
x = a * i;
t = x % b;
}
}
else {
for (i = 2; t != 0; i++) {
x = b * i;
t = x % a;
}
}
cout << "最小公倍数是" << x << endl;
}
system("pause");
}