第六次作业

第1题
x = 8 ∗ 19 ∗ 1 9 − 1 + 3 ∗ 11 ∗ 1 1 − 1 x=8*19*19^{-1}+3*11*11^{-1} x=819191+311111 m o d ( 11 ∗ 19 ) mod(11*19) mod(1119)
(1) 算 1 9 − 1 19^{-1} 191
19 m o d 11 = 8 19mod11=8 19mod11=8
8 ∗ 1 9 − 1 ≡ 1 ( m o d 11 ) 8*19^{-1}≡ 1(mod 11) 81911(mod11)
1 9 − 1 = 7 19^{-1}=7 191=7
(2) 算 1 1 − 1 11^{-1} 111
11 ∗ 1 1 − 1 ≡ 1 ( m o d 19 ) 11*11^{-1}≡ 1(mod 19) 111111(mod19)
1 1 − 1 = 7 11^{-1}=7 111=7
所以:
x = 8 ∗ 19 ∗ 7 + 3 ∗ 11 ∗ 7 ( m o d 11 ∗ 19 ) = 41 x=8*19*7+3*11*7(mod11*19)=41 x=8197+3117(mod1119)=41
第2题
M = 5 ∗ 7 ∗ 9 ∗ 11 = 3465 M=5*7*9*11=3465 M=57911=3465
b 1 = M / 5 = 693 b_1=M/5=693 b1=M/5=693
b 2 = M / 7 = 495 b_2=M/7=495 b2=M/7=495
b 3 = M / 9 = 385 b_3=M/9=385 b3=M/9=385
b 4 = M / 11 = 315 b_4=M/11=315 b4=M/11=315
x = 1 ∗ 693 ∗ 69 3 − 1 + 2 ∗ 495 ∗ 49 5 − 1 + 3 ∗ 385 ∗ 38 5 − 1 + 4 ∗ 315 ∗ 31 5 − 1 ( m o d 3465 ) x=1*693*693^{-1}+2*495*495^{-1}+3*385*385^{-1}+4*315*315^{-1}(mod3465) x=16936931+24954951+33853851+43153151(mod3465)
x = 1 ∗ 693 ∗ 3 + 2 ∗ 495 ∗ 1 + 3 ∗ 385 ∗ 2 + 4 ∗ 315 ∗ 4 ( m o d 3465 ) = 1731 x=1*693*3+2*495*1+3*385*2+4*315*4(mod3465)=1731 x=16933+24951+33852+43154(mod3465)=1731
第3题
200 0 2019 = 4 0 2019 ∗ 5 0 2019 2000^{2019}=40^{2019}*50^{2019} 20002019=402019502019
221 = 13 ∗ 17 221=13*17 221=1317
4 0 2019 ( m o d 221 40^{2019}(mod221 402019(mod221)=[ 1 2019 1^{2019} 12019(mod13}, 6 2019 6^{2019} 62019(mod17}]=[1, 6 3 6^3 63(mod17)]=[1,12]
5 0 2019 ( m o d 221 50^{2019}(mod221 502019(mod221)=[ 1 1 2019 11^{2019} 112019(mod13}, 1 6 2019 16^{2019} 162019(mod17}]=[ 1 1 3 11^3 113(mod13), 1 6 3 16^3 163(mod17)]=[5,16]
200 0 2019 2000^{2019} 20002019(mod211)=[5(mod13), 12 ∗ 16 12*16 1216(mod)17]=[5,5]=5
第7题

#include<iostream>
using namespace std;
//逆元
int modInverse(int a, int m) {
	int m0 = m, t, q;
	int x0 = 0, x1 = 1;

	if (m == 1)
		return 0;

	while (a > 1) {
		q = a / m;
		t = m;
		m = a % m, a = t;
		t = x0;
		x0 = x1 - q * x0;
		x1 = t;
	}

	if (x1 < 0)
		x1 += m0;

	return x1;
}
//CRT
int CRT(int num, int* m, int* n) {
	int ans = 0;
	//M
	int M = 1;
	for (int i = 0; i < num; i++) {
		M = M * n[i];
	}
	//b[i]
	int b[1000];
	for (int i = 0; i < num; i++) {
		b[i] = M / n[i];
	}
	for (int i = 0; i < num; i++) {
		ans += (modInverse(b[i], n[i])) * b[i] * m[i];
	}
	ans = ans % M;
	return ans;
}

int main() {
	int m[1000], n[1000];
	cout << "请输入方程个数:";
	int num;
	cin >> num;
	cout << "请按x ≡ m (mod n)输入m和n,中间用空格隔开" << endl;
	for (int i = 0; i < num; i++) {
		cin >> m[i] >> n[i];
	}
	
	cout << "答案是" << CRT(num, m, n);
	return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值