密码学实验5 求最小公倍数和同余运算

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");
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值