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

实验二、数论基础(中)

一、实验内容

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月。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

群发邮件被判定为垃圾邮件的原因有哪些呢?

群发邮件被判定为垃圾邮件如何处理&#xff1f;邮件群发时怎么避免成为垃圾邮件&#xff1f; 群发邮件一直以来都是一种高效的信息传递方式&#xff0c;然而&#xff0c;随着网络垃圾邮件的激增&#xff0c;越来越多的群发邮件被系统判定为垃圾邮件。蜂邮EDM将深入探讨群发邮件…

用TF-IDF处理文本数据

计算机擅长处理数字&#xff0c;但不擅长处理文本数据&#xff0c;TF-IDF是处理文本数据最广泛使用的技术之一&#xff0c;本文对它的工作原理以及它的特性进行介绍。 根据直觉&#xff0c;我们认为在文本数据分析中出现频率更高的单词应该具有更大的权重&#xff0c;但事实并…

starrocks权限管理-2.3.2版本

1.新用户创建以及授权 1.创建用户&#xff08;未分配角色&#xff09; -- 使用明文密码创建用户&#xff0c;允许其从 172.25.20.1 登陆。如果172.25.20.1被%替换就是所有ip都可以访问 CREATE USER bigdata172.25.20.1 IDENTIFIED WITH mysql_native_password BY Zhengda1; 不…

API文档、API自动化测试神器:Apipost

在数字化时代&#xff0c;API已成为企业和开发者实现数据互通、应用集成的重要桥梁。然而&#xff0c;随着API数量的不断增加&#xff0c;API设计、调试、文档和测试等工作也变得越来越复杂。为了解决这一痛点&#xff0c;一款名为Apipost的API协同研发工具应运而生&#xff0c…

尝试添加服务器中正在运行的docker容器时报错:当前用户没有运行“docker”的权限

尝试添加服务器中正在运行的docker容器时报错&#xff1a;当前用户没有运行“docker”的权限 环境 1&#xff0c;通过vscode ssh到服务器的 2&#xff0c;服务器端有一个contianer&#xff0c;但是无法通过vscode的Dev contianer组件将服务器中正在运行的contianer添加过来 3…

XUbuntu22.04之快速复制绝对路径(二百零五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

【开源】基于JAVA+Vue+SpringBoot的超市账单管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3.3 后端设计在这里插入图片描述 四、系统展示五、核心代码5.1 查询供应商5.2 查询商品5.3 新增超市账单5.4 编辑超市账单5.5 查询超市账单 六、免责说明 一、摘要 1.1 项目介绍 基于…

【大数据架构】OLAP实时分析引擎选型

OLAP引擎面临的挑战 常见OLAP引擎对比 OLAP分析场景中&#xff0c;一般认为QPS达到1000就算高并发&#xff0c;而不是像电商、抢红包等业务场景中&#xff0c;10W以上才算高并发&#xff0c;毕竟数据分析场景&#xff0c;数据海量&#xff0c;计算复杂&#xff0c;QPS能够达到1…

手部受伤手术完就万事大吉?不!还有50%靠康复

在骨科急诊病人中&#xff0c;手外伤约占就诊人数的四分之一&#xff0c;比如常见的擦伤、撕裂伤、挫伤、肌肉拉伤、关节韧带扭伤、骨折及关节脱位等。对于此类损伤&#xff0c;手术的功劳占一半&#xff0c;另一半则是术前术后的功能康复训练。 所以&#xff0c;对手外伤病人来…

systick_config 建立系统时钟

1.systick_config&#xff0c; 建立1ms&#xff08;可以改&#xff09;的系统时钟&#xff0c;包含计数值&#xff0c; 初始值&#xff0c;中断 2. 计数值 SystemCoreClock&#xff0c;对于STM32F4xx 系统时钟为168M, 那么假如168M为1S, /1000为1ms, /1000000为1us 3. SysTick_…

如何使用 Helm 在 K8s 上集成 Prometheus 和 Grafana|Part 2

在 Part 1 中&#xff0c;我们一起了解了什么是 Prometheus 和 Grafana&#xff0c;以及使用这些工具的前提条件和优势。在本部分&#xff0c;将继续带您学习如何安装 Helm 以及如何使用 Prometheus Helm Charts。 开始使用 Helm 和 Helm Chart ArtifactHub 为 Helm Chart 提供…

限流算法之计数器法

文章目录 一、计数器法是什么&#xff1f;二、模拟限流算法java版效果 一、计数器法是什么&#xff1f; 计数器法是限流算法里最简单也是最容易实现的一种算法。 比如&#xff1a;对于一个接口来说&#xff0c;我们1分钟的访问次数不能超过100个。那么我们可以这么做&#xff…

删除sys_file表中的文件信息后同步操作表单中对应的文件字段信息

需求&#xff1a;由于系统的表单文件上传/删除操作与表单的保存操作不同时进行&#xff0c;所以需要调整 细节&#xff1a;&#xff08;某个表&#xff1a;A表&#xff09;表单的文件字段只是保存了上传文件的id&#xff0c;名称&#xff0c;真正的文件保存是保存在一个系统的文…

异步编程利器:CompletableFuture深度解析

本文已收录至Github&#xff0c;推荐阅读 &#x1f449; Java随想录 微信公众号&#xff1a;Java随想录 文章目录 摘要如何使用源码解析基本结构内部原理执行流程 方法介绍创建对象异步执行任务链式操作异步任务组合异常处理取值与状态超时控制与取消操作依赖完成并发限制记忆…

yum来安装php727

yum 安装php727,一键安装&#xff0c;都是安装在系统的默认位置&#xff0c;方便快捷 先确定linux平台中centos的版本信息&#xff0c;一下内容针对el7 查看linux版本 &#xff1a; cat /etc/redhat-release 查看内核版本命令&#xff1a; cat /proc/version (0)如果有安装好…

频率阈图像滤波

介绍 频率阈图像滤波是一种在频域中进行图像处理的方法&#xff0c;它基于图像的频率分布来实现滤波效果。具体步骤如下&#xff1a; 将原始图像转换到频域&#xff1a;使用快速傅里叶变换&#xff08;FFT&#xff09;将图像从空间域转换到频域。对频域图像应用频率阈滤波器&a…

力扣 | 139. 单词拆分

主要是要注意组合的顺序是任意的&#xff01;所以就要先选择目标字串&#xff0c;再选择wordDict public boolean wordBreak(String s, List<String> wordDict) {// dp[i]: 表示前 i 个字符组成的子串是否可以被 wordDict 中的字符串组合而成boolean[] dp new boolean[s…

Prometheus实战篇:Prometheus告警简介

Prometheus告警简介 简介 告警能力在Prometheus的架构中被划分为俩个独立的部分.如下图所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息 alertManager作为一个独立的组件,负责接…

Jenkins-Pipeline语法总结大全

这里写目录标题 pipeline的组成1、pipeline最简单结构1.1、pipeline1.2、stages1.3、stage1.4、steps1.5、agent 2、post3、pipeline支持的命令3.1、environment3.2、tools3.3、input3.4、options3.5、parameters3.6、parallel3.7、triggers3.8、when pipeline的组成 1、pipel…

GPT-4与DALL·E 3:跨界融合,开启绘画与文本的新纪元

在人工智能的发展浪潮中&#xff0c;MidTool&#xff08;https://www.aimidtool.com/&#xff09;的GPT-4与DALLE 3的集成代表了一个跨越式的进步。这一集成不仅仅是技术的结合&#xff0c;更是艺术与文字的完美融合&#xff0c;它为创意产业带来了革命性的变革。本文将探讨GPT…