【网络安全】【密码学】【北京航空航天大学】实验二、数论基础(中)【C语言和Java实现】

news2024/11/17 6:33:59

实验二、数论基础(中)

一、实验内容

1、扩展欧几里得算法(Extended Euclid’s Algorithm)

(1)、算法原理

已知整数 a , b ,扩展的欧几里得算法可以在求得 a , b最大公约数的同时,找到一对整数 x , y ,使得 a , b , x , y 满足如下等式:ax + by = d = gcd(a,b), 其中 gcd(a, b)ab 的最大公约数。

(2)、算法流程

本算法的大致流程如下图所示:

在这里插入图片描述

(3)、 算法的代码实现(C语言)

# include <stdio.h>

int r2, s2, t2;

void Extended_Euclid(int a, int b);

int main(){
    int a, b;
	printf("请输入整数a:\n");
	scanf("%d", &a);
	printf("请输入整数b:\n");
	scanf("%d", &b);
	Extended_Euclid(a, b);
	printf("a和b的最大公因子为: %d\n", r2);
	printf("满足ax + by = gcd(a, b)的因子x和y分别为: %d %d\n", s2, t2);
	return 0;
}
	
void Extended_Euclid(int a, int b){
    int r, s, t;
	int r1, s1, t1;
	int tmp1, tmp2, tmp3;
	int q;
	r = a;
	s = 1;
	t = 0;
	r1 = b;
	s1 = 0;
	t1 = 1;
	while(r1 != 0){
	    q = r / r1;
		tmp1 = r - q * r1;
		tmp2 = s - q * s1;
		tmp3 = t - q * t1;
		r = r1;
		s = s1;
		t = t1;
		r1 = tmp1;
		s1 = tmp2;
		t1 = tmp3;
	}
	r2 = r;
	s2 = s;
	t2 = t;
	return;
}

(4)、算法测试

测试点1:a = 7, b = 5

在这里插入图片描述

测试点2:a = 31, b = -13

在这里插入图片描述

测试点3:a = 24, b = 36

在这里插入图片描述

(5)、一点思考

线性系数x和y不是唯一的,比如样例3中既可以是24 * (-1) + 36 * 1 = 12,也可以是24 * 2 + 36 * (-1) = 12. 如何能使算法找出所有满足条件的解?

2、简单幂取模算法(Simple Exponentiation-Module Algorithm)

(1)、算法原理

每次做乘法操作时都取模,即“乘一次模一次,循环往复”。数学表达式为 d = (((x^(n-1))mod m)*x) mod m

(2)、算法流程

本算法的大致流程如下图所示:

在这里插入图片描述

(3)、算法的代码实现(C语言)

#include <stdio.h>


int main(){
	int x, n, m;
	int ans;
	int i;

    printf("请输入底数x的值:\n");
	scanf_s("%d", &x);

    printf("请输入指数n的值:\n");
    scanf_s("%d", &n);

    printf("请输入模数m的值:\n");
    scanf_s("%d", &m);

	ans = 1;
	
	for(i = 1;i <= n;i ++)
    {
		ans = (ans * x) % m;
	}
	
	printf("%d", ans);
	
	return 0;
}

(4)、算法测试

测试点1:x = 7, n = 16, m = 3

运行时截图:

在这里插入图片描述

测试点2:x = 5, n = 1003, m = 31

运行时截图:

在这里插入图片描述
2、快速幂取模算法(Fast Exponentiation-Module Algorithm)

(1)、算法原理

常规的幂取模算法包含过多的乘法以及取模运算,计算步骤多,导致算法的效率很低。根据模运算和幂运算的性质,可以将幂次(指数n)用2进制进行表示,然后再迭代进行求模幂,从而减少乘法和取模的次数。

(2)、算法流程

本算法的大致流程如下图所示:

在这里插入图片描述

(3)、算法的代码实现(C语言)

#include <stdio.h>


int main()
{
	int x, n, m;
	
	int d = 1;
	
	printf("请输入底数x的值:\n");
	scanf_s("%d", &x);
	
	printf("请输入指数n的值:\n");
	scanf_s("%d", &n);
	
	printf("请输入模数m的值:\n");
	scanf_s("%d", &m);
	
	while(n > 0)
	{
		if((n % 2) == 1)
		{
			d = (d * x) % m;
			n = (n - 1) / 2;
		}
		else
		{
			n = n / 2;
		}
		x = (x * x) % m;
	}
	
	printf("快速幂取模计算结果:\n");
	printf("%d", d);
	
	return 0;
}

(4)、算法测试
测试点1:x = 7, n = 16, m = 3

运行时截图:

在这里插入图片描述测试点2:x = 5, n = 1003, m = 31

运行时截图:

在这里插入图片描述

二、参考文献

1、《密码编码学与网络安全——原理与实践(第七版)》(Cryptography and Network Security, Principles and Practice, Seventh Edition),【美】威廉 斯托林斯 William Stallings 著,王后珍等 译,北京,电子工业出版社,2017年12月。

2、《密码学实验教程》,郭华 刘建伟等 主编,北京,电子工业出版社,2021年1月。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1377492.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

顺序图作业

顺序图作业 一. 简答题&#xff08;共7题&#xff0c;100分&#xff09; (简答题) 交互是什么&#xff1f;请举 2-3 个交互的实际例子。 正确答案&#xff1a; 一次交互就是指在特定语境中&#xff0c; 为了实现某一个目标&#xff0c; 而在一组对象之间进行交换的一组 消息所…

字体包大小缩小的软件

Fontmin - 字体子集化方案https://ecomfe.github.io/fontmin/#app

JAVA制造业MES生产管理系统源码 MES源码

JAVA制造业MES生产管理系统源码 MES源码 开发环境&#xff1a;jdkeclipsetomcatmavenmysql 开发工具&#xff1a;MyEclipse 系统说明&#xff1a; MES制造执行系统&#xff0c;其定位于制造执行系统的Java开源版本&#xff0c;系统包括系统管理&#xff0c;车间基础数据建模&am…

Oracle DBCA工具图形化方式检测不到ASM磁盘组(解决各种报错)

本例环境&#xff1a; 操作系统OEL 6.5数据库版本:11.2.0.4 问题&#xff1a;DBCA建库的时候&#xff0c;检测不到ASM磁盘组 因素一&#xff1a; 可能是在授权的时候执行了 chown –R 775 /u01/app等修改权限。 分析&#xff1a;数据库无法连接ASM&#xff0c;这应该是权限…

代码随想录算法训练营第2天 | 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II

数组理论基础 文章链接&#xff1a;https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 977.有序数组的平方 题目链接&#xff1a;https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 思路1.暴力排序 将每个数平…

国科 GK7201V200 SOC芯片

1.概述 GK7201V200 芯片是国科推出的新一代高集成度、高画质、低码率、低功耗的 AI IP Camera SoC 芯 片。 芯片集成 ARM Cortex A7 处理器&#xff0c;支持专业的 ISP 图像处理单元&#xff0c;H.265/H.264 视频编码&#xff0c;满足客户 差异化业务需求。同时集成了 Ethe…

国产六核CPU商显板,三屏异显,米尔基于全志D9360开发板

芯驰D9-Pro 自主可控、安全可信的高性能商显方案 采用国产CPU&#xff1a;集成了6个ARM Cortex-A551.6GHz 高性能CPU和1个ARM Cortex-R5800MHz&#xff1b; 高性能的高安全HSM安全的处理器&#xff0c;支持TRNG、AES、RSA、SHA、SM2/3/4/9&#xff1b; 它包含100GFLOPS 3D G…

打印的前后顺序

面试题经常会有 <script>console.log(1)setTimeout(function(){console.log(2)})console.log(3)let pnew Promise((resolve,reject) >{console.log(4)resloved(hhhhhh)})p.then(res >{console.log(res)console.log(5)},res >{console.log(7)})console.log(6)&l…

如何进行大数据系统测试

大数据系统常见的架构形式有如下几种&#xff1a; Hadoop架构&#xff1a; Hadoop Distributed File System (HDFS)&#xff1a;这是一种分布式文件系统&#xff0c;设计用于存储海量数据并允许跨多台机器进行高效访问。 MapReduce&#xff1a;作为Hadoop的核心计算框架&#…

JBOD详解

JBOD是存储领域中一类重要的存储设备。 英文全称Just a bunch of disks, 中文也称之为硬盘存储扩展柜。 它是传统存储系统赖以生存的根基之一&#xff0c;如果没有JBOD&#xff0c;那一下子就会省去很多部件&#xff1a;后端HBA、SAS扩展器/FC成环器、线缆、JBOD控制模块等等…

高周期的伦敦金交易机会转到低周期做 不可以吗?

一般的市场观点认为&#xff0c;交易信号出现在越高的时间周期上就越准确&#xff0c;成功的概率就越高。而低时间周期的信号&#xff0c;要推动高时间周期行情的发展&#xff0c;那几乎是不可能。因此多数人认为从高周期转到低周期&#xff0c;然后去捕捉高周期行情机会&#…

强化学习应用(二):基于Q-learning的无人机物流路径规划研究(提供Python代码)

一、Q-learning简介 Q-learning是一种强化学习算法&#xff0c;用于解决基于马尔可夫决策过程&#xff08;MDP&#xff09;的问题。它通过学习一个价值函数来指导智能体在环境中做出决策&#xff0c;以最大化累积奖励。 Q-learning算法的核心思想是通过不断更新一个称为Q值的…

GIS数据

version: 0.2 文章目录 1. GIS 数据类型2. 矢量2.1 Shapefile2.1.1 Wiki介绍2.1.2 重点总结2.1.3 样例 2.2 GeoJSON2.2.1 Wiki介绍2.2.2 重点总结2.2.3 样例 3. 栅格3.1 GeoTIFF3.1.1 Wiki介绍3.1.2 重点总结3.1.3 样例 4. 矢量栅格4.1 GeoPackage4.1.1 Wiki介绍4.1.2 重点总结…

3dmax灯光缓存参数怎么设置?解析来了!

细分&#xff1a;用来决定灯光缓存的样本数量&#xff0c;样本数量以此数值的平方来计算。数值越高&#xff0c;效果越好&#xff0c;速度越慢。一般出图建议1000到1800之间已经足够了。 采样大小&#xff1a;用来控制灯光缓存的样本尺寸大小&#xff0c;较小的数值意味着较小…

FastAdmin西陆教育系统(xiluEdu)开源代码

应用介绍 一款基于FastAdminThinkPHPUniapp开发的西陆教育系统&#xff08;微信小程序、移动端H5、安卓APP、IOS-APP&#xff09;&#xff0c;以下是教育系统所包含的一些功能&#xff1a; 视频课程&#xff1a;教育系统提供在线视频课程&#xff0c;学生可以通过网络观看教师…

dp专题11 一和零

本题链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路&#xff1a; 由题意&#xff0c;这里有两个特征&#xff0c;要求满足选取的字符串总和中&#xff0c;0的个数和1的个数分别不超过m个0 和 n个 1&#xff0c;问选取的字符串最多有多少个…

Linux网络基础及bonding实际操作

1.查看linux基础的网络配置 网关&#xff1a;route -n ip地址&#xff1a;ifconfig 或 ip a DNS服务器&#xff1a;cat /etc/resolv.conf 主机名&#xff1a;hostname 路由&#xff1a;route -n 网络连接状态&#xff1a;ss 或 netstat 2.临时修改网卡名称 3.永久修…

IP核RAM学习

RAM 的英文全称是 Random Access Memory&#xff0c;即随机存取存储器&#xff0c;它可以随时把数据写入任一指定地址的存储单元&#xff0c;也可以随时从任一指定地址中读出数据&#xff0c;其读写速度是由时钟频率决定的。RAM 主要用来存放程序及程序执行过程中产生的中间数据…

在实验室内里的无奈

洋洋洒洒&#xff0c;随口就来。 不知道什么时候起&#xff0c;我喜欢静谧的环境&#xff0c;身边环境太嘈杂&#xff0c;我就容易心烦意乱&#xff0c;记得以前是完全没有这样的毛病的&#xff0c;不过好在&#xff0c;总是能找到安静的地方&#xff0c;我甚至一度极端&#x…

Vue2 实现带输入的动态表格,限制el-input输入位数以及输入规则(负数、小数、整数)

Vue2 实现el-input带输入限制的动态表格&#xff0c;限制输入位数以及输入规则&#xff08;负数、小数、整数&#xff09; 在这个 Vue2 项目中&#xff0c;我们实现一个限制输入位数&#xff08;整数16位&#xff0c;小数10位&#xff09;以及输入规则&#xff08;负数、小数、…