CINTA第一次作业

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

#include<iostream>
using namespace std;
int multiply(int a, int b)
{
	int s = 0;
	for (int i = 1; i <= b; i++)
	{
		s = s + a;
	}
	return s;
}
int main()
{
	int a, b, s;
	cin >> a >> b;
	s = multiply(a, b);
	cout << s;
	return 0;
}

2、给出定理1.1(除法算法)的完整证明

证明    证明包括两部分:存在性和唯一性。

     · 存在性.

       构造集合

                                        S = { a - bk : k∈Z 且 a - bk  ≥ 0}.

        显然,集合S非空. 由良旭原则,存在一个最小元r∈S,且r = a - qb.因此,a = qb + r , r ≥ 0.假设,r < b ,则r = e + b . 因此,a = r + qb = e + b + qb = (1 + q)b + e . 即 e = a - (1 + q)b . 由构造的集合可知,e∈S,因为易知 e < r ,但 r 又是S里的最小元,相矛盾 ,所以r > b .

    ·唯一性.

     思路:所有的q和r都是同一数组:即假设不唯一,推出矛盾

     假设 a = q′b + r , q ≠ q′ . 因为 a = qb + r , 两式相减不相等,矛盾

     假设 a = qb + r′ , r ≠ r′ . 因为 a = qb + r , 两式相减不相等,矛盾

     假设 a = q′b + r′ , q ≠ q′ ,r ≠ r′ . 因为 a = qb + r , 两式相减不相等,矛盾

     因此,存在唯一整数对 q 和 r .

3、用C语言编程实现一种迭代版本gcd算法

#include<iostream>
using namespace std;
int GCD(int a, int b)
{
 while (a%b)
 {
  int k;
  if (a%b != 0)
  {
   k = b;
   b = a % b;
   a = k;
  }
  else
   return b;
 }
 return b;
}
int main( )
{
 int a, b, p;
 cout << "输入两个整数" << endl;
 cin>>a>>b;
 if ( a==0||b == 0)
  cout << "输入错误" << endl;
 else
  p = GCD(a, b);
 cout << "gcd(a,b)=" << p << endl;
  return 0;
}

  egcd算法

  利用gcd算法,写程序完成一下函数的功能。输入:一个正整数n ; 输出 : 大于等于1,小于n,且与n互素的正整数的个数。

int gcd(int a, int b) {
	while (b) {
		a = a % b;
		int temp = a;
		a = b;
		b = temp;
	}
	return a;
}
int main() {
	int n, k = 0;
	cin >> n;
	if (n == 2)cout << 1 << endl;
	else {
		for (int i = 1; i < n; i++) {
			if (i % 2 == 0)continue;
			if (gcd(n, i) == 1)k++;
		}
		cout << k << endl;
	}
}

    4、第二章的第6题

证明:由于gcd(a,b)= ar + bs ,设 g^{a}= a′m + 1 , g^{b}= b′m + 1 . 所以g^{gcd\left ( a,b \right )} = g^{ar+bs}=g^{ar}\cdot g^{bs}=\left ( g^{a} \right )^{r}\cdot \left ( g^{b} \right )^{s}= km +1(k为整数).  因此,g^{gcd\left ( a,b \right )}≡ 1(mod m).

         第二章的第8题

证明:假设a = md , b = nd . 即需证明gcd(m,n)= 1 . 假设gcd(m,n)= f . 则 m = pf ,n = qf  ; 则a = pfd , b = qfd . 这说明 fd 能同时被 a 和 b整除 . 然而 gcd(a,b)= d ,即 a 和 b 的最大公约数是 d ,所以 fd ≤ d . 所以 f ≤ 1 ,但 f 是一个正整数,所以 f = 1 . 即 gcd(a/b,b/d)=1 .

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值