信息安全的数学基础作业一

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

#include<iostream>
using namespace std;
int multiply(int a, int b)
{
	if (b == 0) { return 0; }
	if (b % 2 == 0) { return (2 * multiply(a, b / 2)); }
	if (b % 2 == 1) { return (2 * multiply(a, b / 2) + a); }
}
int main()
{
	int a, b, s;
	cin >> a >> b;
	s = multiply(a, b);
	cout << a << "×" << b << " = " << s;
	return 0;
}

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

定理1.1:对于给定的整数a和b,其中b>0,存在唯一的整数对q(商)和r(余数)使得,a=qb+r且0<=r<b。

证明存在性:构造集合S = {a − bk : k ∈ Z 且 a − bk ≥ 0}.
显然,集合 S 非空,根据良序原则,存在一个最小元 r ∈ S,且 r = a − qb                                   因此,a = qb + r, r ≥ 0。
若r>=b,则可设r=b+m,其中m ∈ Z                                                                                                    则a=qb+b+m=(q+1)b+m。不符合商和余数的原则。

证明唯一性:假设存在不止一个整数对满足条件,则可设:
a=q1b+r1,a=q2b+r2
不妨设q1>q2,显然,r1<r2.
q1b+r1=q2b+r2,(q1-q2)*b=r2-r1,b=(r2-r1)/(q1-q2)
因为0<=r1<b,0<=r2<b,r1<r2,所以0<r2-r1<b.
因为q1,q2为整数,且q1>q2,所以q1-q2>=1.
因为0<r2-r1<b,q1-q2>=1,所以(r2-r1)/(q1-q2)<b,与b=(r2-r1)/(q1-q2)矛盾
因此,假设不成立                                                                                                                           综上,定理1.1得证。

3.用 C 语言编程实现一种迭代版本的gcd算法和一种egcd算法。利用gcd算法,写程序完成以下函数的功能。输入:一个正整数n;输出:大于等于1,小于n,且与n互素的正整数的个数

gcd算法

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

egcd算法

struct RS
{
	int d;
	int r;
	int s;
};
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;
}

函数

#include <stdio.h>
 
int Gcd(int a, int b) {
    while (b != 0) {
        int temp = b;
        b = a % b;
        a = temp;
    }
    return a;
}
 
int main()
{
	int n,i,cnt=0;
	scanf("%d",&n);
	
	for(i=1;i<n;i++)
		if(Gcd(i,n)==1)
			cnt++;
	
	printf("与%d互素的正整数的个数为%d\n",n,cnt);
	
	return 0; 
}

4.第二章的第6、8题 

 6.假设g^{a}≡1(mod m)且g^{b}≡1(mod m)。请证明g^{gcd(a,b)}≡1(mod m)。

证明:由Bezout定理得gcd(a,b)=ar+bs

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值