CINTA作业二:GCD与EGCD

#给出Bezout定理的完整证明
证明:
构造集合:
S={am-bn:m,n∈Z且am+bn>=0}
显然,S集合非空,根据良序原理,取其中最小值d=ar+bs,r、s∈Z
① 证d是a和b的公因子
令a=dq+r0,0<=r0<d,即r0=a-dq.将d=ar+bs代入,得:
r0=a-(ar+bs)q=a-arq-bsq=a(1-rq)+b(-sq)
易看出r0也在集合S中,如果r0>0,那么这和d是S中的最小值相矛盾,所以r0为0,即a=dq+0,得d整除a,同理可得d也整除b,所以d是a和b的公因数
② 证d是a和b的最大公因数
假设存在d0能够分别整除a和b,得a=qd0,b=kd0
则ar+bs=qd0r+kd0s=d0(qr+ks)=d
则d0整除d
∴得证

#实现GCD算法的迭代版本

#include<iostream>
#include<cmath>
using namespace std;


int gcd(int a, int b)
{
	//大小排序
	if (a < b)
	{
		int c;
		c = a;
		a = b;
		b = c;
	}


		while(true)
	{
		
		//定义商d,余数c
		int d;
		int c = 0;
		//求a mod b,得d
		c = a / b;
		d = a - b * c;

		//有公因数,跳出
		if (d == 0)
		{
			break;
		}
		//回到初始状态,准备下一个循环
		a = b;
		b = d;
	}
	return b;
}

int main()
{
	int a = 24, b = 20;
	cout << gcd(a, b);

}

#实现EGCD算法。输入:a、b两个整数,输出:r、s、d三个整数,满足ar+bs=d

#include<iostream>
using namespace std;

int egcd(int a, int b)//a>b
{
	
    int r1,r2, s1, s2;
	r1 = 1;r2 = 0;
	s1 = 0;s2 = 1;
	while(true)
	{ 
	//判断终止条件
	int c, d;
	c = a / b;
	d = a - b * c;
	if (d == 0)return b;

	

	int t1, t2;
	t1 = r1 - c * s1;
	t2 = r2 - c * s2;

	a = b;r1 = s1;r2 = s2;
	b = d;s1 = t1;s2 = t2;
    }
}


int main()
{
	cout << egcd(36, 24);
}

#实现批处理版本的GCD算法

#include<iostream>
using namespace std;

int array_gcd(int* array, int n)
{
	for (int i = 0;i < n-1;i++)
	{
		int a = array[i];int b = array[i + 1];
		if (a < b)
		{
			int c;
			c = a;
			a = b;
			b = c;
		}


		while (true)
		{
			int d;
			int c = 0;

			c = a / b;
			d = a - b * c;

		
			if (d == 0)
			{
				break;
			}
		
			a = b;
			b = d;
		}
		array[i + 1] = b;
	}
	return array[n - 1];
}

int main()
{
	int array[100];
	int n = 0;
	while (cin >> array[n])
	{
		n++;
	}
	cout<<"数组最大公因数:"<<array_gcd(array, n);
}

此算法由数组中的数两两用gcd算法得出

好的,这里是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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值