CINTA作业一

本文介绍了使用C语言实现的迭代版本的简单乘法、除法算法(包括欧几里得算法和Bézout定理的应用)、GCD算法以及EGCD算法,并给出了利用GCD计算与n互素正整数个数的函数。还涉及了模运算性质的证明和gcd分数化简问题的逻辑分析。
摘要由CSDN通过智能技术生成

用C语言编程实现一种迭代版本的简单乘法

C语言代码如下:

//迭代版本的简单乘法
//位置计数法
int num = 0;
int Mult(int a, int b)
{
	if (b == 0)
		return num;
	if (b & 1)
		num += a;
	return Mult(a << 1, b >> 1);
}

定理1.1(除法算法)的完整证明

除法算法:
对任意给定的整数a和b,其中b>0,存在唯一的整数对q(商)和r(余数)使得:a=qb+r,且0≤r<b
证明:
存在性:
构造集合 S={a-bk :k属于Z且a-bk≥0}。 显然集合非空,由良序原则可得,存在一个最小元r(r∈S),且 r=a-qb 。因此,r=a-qb且r≥0。
假设r≥b,令r=b+x(x≥0),所以可得a=qb+r=qb+b+x=(q+1)b+x,违反了除法的商不变原则,所以r≥b 不成立,所以r≤b。
唯一性
假设存在多个q和r满足a=qb+r,则可得 a=q1b+r1,a=q2b+r2。假设q1>q2,显然r1<r2,将两式联立得q1+r1=q2+r2 ⇒ (q1-q2)b=r2-r1 ⇒b=(r2-r1)/(q1-q2)。
因为q1,q2 均为整数且q1>q2,所以q1-q2≥1,又因为r1<r2<b,所以0<r2-r1<b ,可得 (r2-r1)/(q1-q2)<b。与上面矛盾,所以假设不成立。唯一性得证。
所以除法算法得证。

用C语言编程实现一种迭代版本的gcd算法和egcd算法

gcd()算法

欧几里得算法: 给定两个整数a和b,设a≥b,则a和b的最大公因子等于b和a mod b的最大公因子。即gcd(a,b)=gcd(b,a mod b)
C语言代码如下:

//迭代版本的gcd算法
int GCD(int a, int b)
{
	while (b)
	{
		int temp = b;
		b = a % b;
		a = temp;
	}
	return a;
}

egcd()算法

Bézout定理: 设 a 和 b 为非零整数,存在整数 r 和 s 使得:gcd(a, b) = ar + bs,而且,a 与 b 的最大公因子是惟一的。称 r 和 s 为 Bézout 系数。
C语言代码如下:

//迭代版本的egcd算法,ax+by=GCD(a,b)
struct RS
{
	int d;//最大公因子
	int r;//a的Bezout系数
	int s;//b的Bezout系数
};
RS EGCD(int a, int b)
{
	int temp, tempx, tempy;
	int r0 = 1, s0 = 0, r1 = 0, s1 = 1;
	RS rs;
	while (b)
	{
		int p = a / b;
		temp = b;
		b = a % b;
		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;
	return rs;
}

利用gcd算法完成以下函数的功能:

输入:一个正整数n。
输出:大于等于1,小于n且与n互素的正整数的个数。
C语言代码如下:

//大于等于1,小于n,且与n互素的正整数的个数
int Num_gcd_n(int n)
{
	int num = 0;
	for (int i = 1; i < n; i++)
	{
		if (GCD(n, i) == 1)
			num += 1;
	}
	return num;
}

第二章6,8题

6题:

题目: 假设 ga ≡ 1 (mod m) 且 gb ≡ 1 (mod m),请证明 ggcd(a,b) ≡ 1 (mod m)。
证明: 在进行证明之前,先写出要用到的mod的两条性质:
乘法性质:(a*b) mod c=(a mod c * b mod c) mod c
幂运算性质: ab mod c=(a mod c)b mod c
根据Bezout定理,存在整数r和s使得gcd(a,b)=ar+bs。结合mod的两条性质可得:
ggcd(a,b) mod m
=gar+bs mod m
=( gar * gbs) mod m
=(gar mod m * gbs mod m) mod m
=[ (ga mod m)r mod m * (gb mod m)s mod m ]
由ga ≡ 1 (mod m)可得ga mod m=1 mod m,同理 gb mod m=1 mod m
将两个式子带入得:
[ (ga mod m)r mod m * (gb mod m)s mod m ]
=[(1 mod m)r mod m * (1 mod m)s mod m
=(1r mod m * 1s mod m) mod m
=(1r *1s) mod m
=1 mod m
即ggcd(a,b) ≡1(mod m)。

8题

题目: 如果 gcd(a, b) = d,则 gcd(a/d, b/d) = 1。
证明: 假设gcd(a/d,b/d)=k(k为正整数且k>1),即k是a/d.b/d的最大公约数。即存在m,n(m≠n),a/d=mk,b/d=nk,所以a=mdk,b=ndk。
此时a,d的最大公约数是dk,因为k>1,所以dk>k,与gcd(a, b) = d矛盾,所以k≤1,又因为k为正整数,所以k=1。即 gcd(a/d, b/d) = 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
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值