CINTA作业二

第三章

1、模指数运算函数

要求: 写一个模指数运算函数Mod_Exp,输入a、b和m,输出a^b mod m,即a的b次方模m。

递归版本:

C++代码如下:

//递归版本
int Mod_Exp(int a, int b, int m)
{
	if (b == 0)
		return 1;
	int temp = Mod_Exp(a, b / 2, m);
	if (b % 2 == 0)
		return (temp * temp) % m;
	else if (b % 2 == 1)
		return (a * temp * temp) % m;
}

迭代版本:

C++代码如下:

//迭代版本
int Mod_Exp_1(int a, int b, int m)
{
	int res = 1;
	while (b != 0)
	{
		if (b & 1)
			res = (res * a) % m;
		b = b >> 1;
		a = (a * a) % m;
	}
	return res;
}

2、求乘法逆元函数

**要求:**写一个求乘法逆元的函数Mul_Inverse,输入a和m,求a模m的乘法逆元。提示,要求只输出正整数。
首先,a模m的乘法逆元存在当且仅当 gcd ⁡ ( a , m ) = 1 \gcd(a,m)=1 gcd(a,m)=1,然后我们求乘法逆元的思路主要是利用扩展欧几里得算法(egcd算法)。
C++代码如下:

int Mul_Inverse(int a, int m)
{
	int temp, tempx, tempy;
	int tempm = m;
	int r0 = 1, s0 = 0, r1 = 0, s1 = 1;
	RS rs;
	while (m)
	{
		int p = a / m;
		temp = m;
		m = a % m;
		a = temp;
		int tempr0 = r0, temps0 = s0;
		r0 = r1, s0 = s1;
		r1 = tempr0 - p * r1;
		s1 = temps0 - p * s1;
	}
	rs.r = r0, rs.s = s0, rs.d = a;
	while (rs.r < 0)
		rs.r += tempm;//若逆元<0,则再求出大于0的乘法逆元
	if (rs.d == 1)//a,m互素
		return rs.r;
	else
		return -1;//乘法逆元不存在
}

第四章

第一题

**题目:**设 p = 23 和 a = 3,使用费尔马小定理计算 a 2019   m o d   p a^{2019}\bmod p a2019modp
解: a 2019   m o d   p = 3 2019   m o d   23 = 3 91 ∗ 22 + 17   m o d   23 a^{2019}\bmod p=3^{2019}\bmod23=3^{91*22+17}\bmod23 a2019modp=32019mod23=39122+17mod23
91 ∗ 22 = 91 ∗ ( 23 − 1 ) 91*22=91*(23-1) 9122=91(231),根据费尔马小定理可得 3 23 − 1 ≡ 1 ( m o d 23 ) 3^{23-1}\equiv1\pmod{23} 32311(mod23),所以 3 91 ∗ 22 + 17   m o d   23 = 3 17   m o d   23 = 16 3^{91*22+17}\bmod23=3^{17}\bmod23=16 39122+17mod23=317mod23=16

第五题

**题目:**请证明 13 整除 2 70 + 3 70 2^{70}+3^{70} 270+370。[提示:这是一道名为证明题的计算题。]
解:证明 13 整除 2 70 + 3 70 2^{70}+3^{70} 270+370即证明 ( 2 70 + 3 70 )   m o d   13 = 0 (2^{70}+3^{70})\bmod13=0 (270+370)mod13=0
( 2 70 + 3 70 )   m o d   13 (2^{70}+3^{70})\bmod13 (270+370)mod13
= ( 2 70   m o d   13 + 3 70   m o d   13 )   m o d   13 =(2^{70}\bmod13+3^{70}\bmod13)\bmod13 =(270mod13+370mod13)mod13
= ( 2 12 ∗ 5 + 10   m o d   13 + 3 12 ∗ 5 + 10   m o d   13 )   m o d   13 =(2^{12*5+10}\bmod13+3^{12*5+10}\bmod13)\bmod13 =(2125+10mod13+3125+10mod13)mod13
根据费尔马小定理可得: 2 13 − 1 ≡ 1 ( m o d 13 ) 2^{13-1}\equiv1\pmod{13} 21311(mod13) 3 13 − 1 ≡ 1 ( m o d 13 ) 3^{13-1}\equiv1\pmod{13} 31311(mod13)
所以: ( 2 12 ∗ 5 + 10   m o d   13 + 3 12 ∗ 5 + 10   m o d   13 )   m o d   13 (2^{12*5+10}\bmod13+3^{12*5+10}\bmod13)\bmod13 (2125+10mod13+3125+10mod13)mod13
= ( 2 10   m o d   13 + 3 10   m o d   13 )   m o d   13 =(2^{10}\bmod13+3^{10}\bmod13)\bmod13 =(210mod13+310mod13)mod13
= ( 10 + 3 )   m o d   13 = 0 =(10+3)\bmod13=0 =(10+3)mod13=0,题目得证。

第六题

**题目:**使用欧拉定理计算 2 100000   m o d   55 2^{100000}\bmod55 2100000mod55
解:欧拉定理:
n n n a a a为正整数,且 gcd ⁡ ( a , n ) = 1 \gcd(a,n)=1 gcd(a,n)=1,则
a ϕ ( n ) ≡ 1 ( m o d n ) a^{\phi(n)}\equiv1\pmod{n} aϕ(n)1(modn)
gcd ⁡ ( 2 , 55 ) = 1 \gcd(2,55)=1 gcd(2,55)=1可得 2 ϕ ( 55 ) ≡ 1   m o d   55 2^{\phi(55)}\equiv1\bmod55 2ϕ(55)1mod55
又由欧拉 p h i phi phi函数公式可得 ϕ ( 55 ) = ϕ ( 5 ) ∗ ϕ ( 11 ) = 4 ∗ 10 = 40 \phi(55)=\phi(5)*\phi(11)=4*10=40 ϕ(55)=ϕ(5)ϕ(11)=410=40
2 40   m o d   55 = 1 2^{40}\bmod55=1 240mod55=1
所以 2 100000   m o d   55 2^{100000}\bmod55 2100000mod55
= 2 100000   m o d   55 =2^{100000}\bmod55 =2100000mod55
= 2 40 ∗ 2500   m o d   55 =2^{40*2500}\bmod55 =2402500mod55
= ( 2 40   m o d   55 ) 2500   m o d   55 =(2^{40}\bmod55)^{2500}\bmod55 =(240mod55)2500mod55
= 1   m o d   55 = 1 =1\bmod55=1 =1mod55=1

第八题

**题目:**手动计算 7 1000 7^{1000} 71000 的最后两个数位等于什么?
解:题目即计算 7 1000   m o d   100 7^{1000}\bmod100 71000mod100的值,与上一题相同由欧拉定理可得
7 ϕ ( 100 ) ≡ 1   m o d   100 7^{\phi(100)}\equiv1\bmod100 7ϕ(100)1mod100
ϕ ( 100 ) = 40 \phi(100)=40 ϕ(100)=40所以 7 40   m o d   100 = 1 7^{40}\bmod100=1 740mod100=1
所以 7 1000   m o d   100 7^{1000}\bmod100 71000mod100
= 7 40 ∗ 25   m o d   100 =7^{40*25}\bmod100 =74025mod100
= ( 7 40   m o d   100 ) 25   m o d   100 =(7^{40}\bmod100)^{25}\bmod100 =(740mod100)25mod100
= 1   m o d   100 = 1 =1\bmod100=1 =1mod100=1
所以最后两个数子是0和1。

好的,这里是50种不同国家的语言表达“我爱你”: 1. English - I love you 2. Spanish - Te quiero 3. French - Je t'aime 4. German - Ich liebe Dich 5. Italian - Ti amo 6. Portuguese - Eu te amo 7. Russian - Ya lyublyu tebya 8. Chinese (Mandarin) - Wo ai ni 9. Japanese - Aishiteru 10. Korean - Sarang hae 11. Arabic - Ana behibak (to a male) / Ana behibek (to a female) 12. Dutch - Ik hou van je 13. Danish - Jeg elsker dig 14. Swedish - Jag älskar dig 15. Norwegian - Jeg elsker deg 16. Finnish - Minä rakastan sinua 17. Polish - Kocham Cię 18. Czech - Miluji Tě 19. Hungarian - Szeretlek 20. Bulgarian - Obicham te 21. Greek - S'ayapo 22. Turkish - Seni seviyorum 23. Romanian - Te iubesc 24. Croatian - Volim te 25. Serbian - Volim te 26. Slovenian - Ljubim te 27. Slovak - Milujem Ťa 28. Estonian - Ma armastan sind 29. Latvian - Es tevi mīlu 30. Lithuanian - Aš tave myliu 31. Icelandic - Ég elska þig 32. Albanian - Te dua 33. Thai - Phom rak khun (to a male) / Chan rak khun (to a female) 34. Vietnamese - Anh ye^u em (to a female) / Em ye^u anh (to a male) 35. Indonesian - Saya cinta padamu 36. Filipino - Mahal kita 37. Hindi - Main tumse pyar karta hoon 38. Bengali - Ami tomake bhalobashi 39. Urdu - Main tumse muhabbat karta hoon 40. Marathi - Me tujhe pyaar kartaa hoo 41. Punjabi - Main tere pyar da haan 42. Telugu - Nenu ninnu premisthunnanu 43. Tamil - Naan unnai kaadhalikken 44. Malayalam - Njan ninnodenikkoo 45. Kannada - Naanu ninna preetisuttene 46. Gujrati - Hu tane pyar karoo chu 47. Nepali - Ma timilai maya garchu 48. Sinhala - Mama oyata arderyi 49. Burmese - Chit pa de 50. Mongolian - Bi chamd hairtai
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值