同余定理与哈希函数
目录
- 同余定理
- 哈希函数
- 加密算法
余数有很多的应⽤场景,⽐如散列函数、加密算法,循环冗余校验等等。生活中也有很多与余数有关的例子。
-
比如,你要将1147条数据分页写入,每页10条,计算总页数。就可以用1147除以10,商114,余7,所以总页数就是114+1=115,最后的余数7就是多出来不够⼀页的数据。
-
再比如,今天是星期四,你需要知道50天之后是星期几,就可以用50除以7(⼀个星期有7天),余1 。然后在今天的基础上加⼀天,也就是50天之后是星期五。
余数总是在⼀个固定的范围内。比如你拿任何⼀个整数除以7,得到的余数肯定是在0~6之间的某⼀个数。所以当我们知道今天是星期⼀,那便可以知道这⼀天之后的第1万天、10万天是星期几。
比如:
a = 123456
b = 7
c = a % b
print(c) #余4
a = 7125893
b = 7
c = a % b
print(c) #余5
整数是没有边界的,它可能是正无穷,也可能是负无穷。但是余数却可以通过某⼀种关系,让整数处于⼀个确定的边界内。假如今天是星期⼀,求从今天开始的100天⾥有多少个星期? 用100除以7,商14余2,也就是说这100天⾥有14周多2天。
换个⻆度可以说:这100天⾥,第1天、第8天、第15天等等,在余数的世界⾥都被认为是同⼀天,因为它们的余数都是1,都是星期⼀。同理,第2天、第9天、第16天余数都是2,都是星期⼆。
同余定理
这些数的余数都是⼀样的,所以被归类到了⼀起,这⼀结论被称为同余定理。就是两个整数a和b,如果它们除以正整数n得到的余数相等,我们就可以说a和b对于模n同余。也就是说所有星期⼀都是同余的,同理,星期二、星期三、星期四等等这些天也都是同余的。还有我们经常提到的奇数和偶数,其实也是同余定理的⼀个应用。
同余定理是一种在数学中广泛应用的方法,用于判断两个整数之间是否具有某种关系。可以通过使用模运算符(%)来实现同余定理,从而对数据进行分类。以下是一个简单的同余定理示例,用于将整数分为三类:
def classify(num):if num % 3 == 0:return "Class A"elif num % 3 == 1:return "Class B"else:return "Class C"
不管你的模是几,最终得到的余数肯定都在⼀个范围内。比如除以7,可以得到了星期几;除以2,就得到了奇偶数。所以按照这种方式, 我们就可以把无穷多个整数分成有限的类。比如哈希函数。
生成随机数也是同余定理的常见应用。 a、c、m分别是同余定理中的参数,x是初始值,循环生成随机数时,每次将当前的x带入同余公式中计算,得到新的x值。在使用同余定理生成随机数时,需要选择合适的参数和初始值,否则可能会出现随机数分布不均匀或者重复的情况。
# 定义参数
a = 1103515245
c = 12345
m = 2**32# 定义初始值
x = 0# 循环生成随机数
for i in range(10):x = (a * x + c) % mprint(x)
哈希函数
在每个编程语言中,都会有对应的哈希函数。哈希有的时候也会被译为散列,简单来说,它就是将任意⻓度的输⼊,通过哈希算法,压缩为某⼀固定⻓度的输出。
假如你想要快速读写100万条数据记录,要达到高速地存取,最理想的情况是开辟⼀个连续的空间存放这些数据,这样可以减少寻址的时间。当我们并没有能够容纳100万条记录的连续地址空间时可以看看系统是否可以提供若干个较小的连续空间并能存放⼀定数量的记录。比如我们找到了100个较⼩的连续空间,这些空间彼此之间是被分隔开来的,但是内部是连续的,并足以容纳1万条记录连续存放,那就可以使⽤同余定理来设计⼀个散列函数,实现哈希表的结构。
def hash_function(key):# 假设key是字符串类型hash_value = 0for i in range(len(key)):# 将每个字符的ASCII码相加hash_value += ord(key[i])# 取余数得到哈希值return hash_value % 10
上述代码实现了一个简单的哈希函数,它将输入的字符串中每个字符的ASCII码相加,并取余数得到哈希值。在实际应用中,还需要考虑哈希冲突、哈希表大小等因素。
哈希函数是一种将输入映射到固定大小输出的函数,常用于快速查找、数据加密等场景。假设有两条记录,它们的记录标号分别是1和101。我们把这些模100之后余数都是1的,存放到第1个可⽤空间⾥。以此类推,将余数为2的2、102、202等,存放到第2个可⽤空间,将100、200、300等存放到第100个可⽤空间⾥。这样就可以根据求余的快速数字变化,对数据进⾏分组,并把它们存放到不同的地址空间⾥。⽽求余操作本身非常简单,几乎不会增加寻址时间。
加密算法
还可以在公式中加⼊⼀个较⼤的随机数MAX,引⼊MAX随机数可以增强加密算法的保密程度。⽐如说要加密⼀组三位数,设定⼀个这样的加密规则:
- 先对每个三位数的个、十和百位数,都加上⼀个较⼤的随机数。
- 然后将每位上的数都除以7,⽤所得的余数代替原有的个、十、百位数。
- 最后将第⼀位和第三位交换。
这就是⼀个基本的加密变换过程。
import randomdef encrypt(num):# 生成随机数rand_num = random.randint(1000, 9999)# 分离百位、十位和个位a = num // 100b = (num % 100) // 10c = num % 10# 加上随机数a += rand_num // 100b += (rand_num % 100) // 10c += rand_num % 10# 对每位上的数进行除7取余操作a %= 7b %= 7c %= 7# 交换第一位和第三位a, c = c, a# 合并三位数字encrypted_num = a * 100 + b * 10 + creturn encrypted_num# 测试样例
num = 469
encrypted_num = encrypt(num)
print("原始数字:", num)
print("加密后数字:", encrypted_num)
相关文章:
同余定理与哈希函数
目录 同余定理哈希函数加密算法 余数有很多的应⽤场景,⽐如散列函数、加密算法,循环冗余校验等等。生活中也有很多与余数有关的例子。 比如,你要将1147条数据分页写入,每页10条,计算总页数。就可以用1147除以10&#x…...
03-01-Vue组件的定义和注册
前言 我们接着上一篇文章02-Vue实例的生命周期函数 来讲。 下一篇文章 03-02-Vue组件之间的传值 什么是组件 组件: 组件的出现,就是为了拆分Vue实例的代码量的,能够让我们以不同的组件,来划分不同的功能模块,将来我们…...
【python进阶】txt excel pickle opencv操作demo
文章目录 1. txt读写读综合案例 日志文件读写 2. excel读写读取csv读取xlsx 3. matplotlib 案例折线图多个折现图散点图柱状图饼状图 4 opencv 案例加载与展示图片缩放图片旋转图片保存图片读取摄像头视频保存opencv 综合案例 5 pickle 案例 1. txt读写 读 file.read() file.r…...
Aware接口作用
介绍 Aware(感知)接口是一个标记,里面没有任何方法,实际方法定义都是子接口确定(相当于定义了一套规则,并建议子接口中应该只有一个无返回值的方法)。 我们知道spring已经定义好了很多对象,如…...
Docker部署Minio S3第三方存储
Docker部署Minio S3第三方存储 你不要着急,你先去读你的书,我去看我的电影,总有一天,我们会窝在一起,读同一本书,看同一部电影。 安装Docker 1、选择要安装的平台 Docker要求CentOS系统的内核版本高于3.1…...
听说京东618裁员没?上午还在赶需求,下午就开会通知被裁了~
文末还有最新面经共享群,没准能让你刷到意向公司的面试真题呢。 京东也要向市场输送人才了? 在群里看到不少群友转发京东裁员相关的内容: 我特地去网上搜索了相关资料,看看网友的分享: 想不到马上就618了,东哥竟然抢…...
力扣226. 翻转二叉树(DFS的两种思路)
Problem: 226. 翻转二叉树 文章目录 题目描述思路复杂度Code 题目描述 思路 涉及二叉树的递归解法时往往需要考虑两种思路: 1.在递归遍历时执行题目需要的具体要求; 2.将一个大问题分解为多个小子问题 具体到本体: 思路1:遍历 先…...
状态机-非重叠的序列检测
描述 设计一个状态机,用来检测序列 10111,要求: 1、进行非重叠检测 即101110111 只会被检测通过一次 2、寄存器输出且同步输出结果 注意rst为低电平复位 信号示意图: 波形示意图: 输入描述 输入信号 clk rst data…...
Word怎么画图?这5个方法收藏好!
“我需要在Word文档中画一些图,想问下Word应该怎么画图呢?有没有朋友可以帮我看看怎么操作呢?” 在今天的数字化时代,信息爆炸式增长,人们越来越需要高效、直观地传递和接收信息。而Word画图功能正是这一需求的完美体现…...
qt designer 依赖库 QMessageBox
目录 qt designer 依赖库配置实例 单步调试快捷键 f10 QMessageBox 使用方法 背景图设置...
反序列化漏洞(JBoss、apache log4、apache Shiro、JWT)Weblogic未授权访问、代码执行、任意上传
1.1什么是反序列化 就是把一个对象变成可以传输的字符串,目的就是为了方便传输。假设,我们写了一个class,这个class里面存有一些变量。当这个class被实例化了之后,在使用过程中里面的一些变量值发生了改变。以后在某些时候还会用到…...
PHP身份证真伪验证、身份证二、三要素核验、身份证ocr接口
实名认证有利于网络绿化,所以在互联网发展迅速的今天,实名认证成了“刚需”。而OCR与实名认证两种产品的结和更是擦出了美丽的火花。翔云人工智能开放平台提供的实名认证OCR接口良好的展现出两种功能结合的效果。以身份实名认证产品举例来说,…...
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 布局管理器 | 表单布局Form Layout 文章编号:…...
数智赋能内涝治理,四信城市排水防涝解决方案保障城市安全运行
由强降雨、台风造成城市低洼处出现大量积水、内涝的情况时有发生,给人们出行带来了极大不便和安全隐患,甚至危及群众生命财产安全。 为降低内涝造成的损失,一方面我们要大力加强城市排水基础设施的建设;另一方面要全面掌握城市内涝…...
docker实战之搭建MYSQL8.0主从同步
目录 环境配置容器创建主服务器创建MYSQL容器新增my.cnf文件创建用户并授权 从服务器创建MYSQL容器新增my.cnf文件重启MYSQL容器配置主从同步 验证主从同步彩蛋 MySQL 主从同步(Master-Slave Replication)是一种常用的解决方案,它允许一个主服…...
LTD275次升级 | 网页编辑器新增AI翻译 • 文章|产品等内容可导出 • 新增交互数据 • 购物清单可导出• 官微中心app出新版
1、 网站编辑器文本组件可一键翻译; 2、 文章、产品新增导出功能; 3、 购物车新增导出购物清单功能; 4、 App优化首页数据展示、新增访客交互数据功能; 5、 已知问题修复与优化; 01 网站编辑器 新增文本组件一键翻…...
代码随想录算法训练营第36期DAY36
贪心好难,希望能坚持到柳暗花明那天。 DAY36 1005K次取反后最大化的数组和 自己的方法,注意越界条件放在最前面就好: class Solution {public: int largestSumAfterKNegations(vector<int>& nums, int k) { //自己的…...
zookeeper安装教程
前置环境: hadoop3.3.6 三台集群 CentOS7 (图文并茂)基于CentOS-7搭建hadoop3.3.6大数据集群-CSDN博客 1.下载并上传 下载并上传ZOOKEEPER安装包到主节点 官网下载地址 Index of /dist/zookeeper (apache.org) 切换到/opt/bigdata目录(根据自己的情况…...
windows2008修改远程桌面端口,如何果断修改远程桌面端口,确保系统安全无忧!
在数字化时代的浪潮中,Windows 2008系统以其卓越的稳定性和可靠性,赢得了众多企业和个人的青睐。然而,随着网络安全问题的日益严峻,如何确保远程桌面连接的安全,成为了摆在我们面前的一道难题。今天,我将为…...
【计算机网络原理】对传输层TCP协议的重点知识的总结
˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
浅谈 React Hooks
React Hooks 是 React 16.8 引入的一组 API,用于在函数组件中使用 state 和其他 React 特性(例如生命周期方法、context 等)。Hooks 通过简洁的函数接口,解决了状态与 UI 的高度解耦,通过函数式编程范式实现更灵活 Rea…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
SQL慢可能是触发了ring buffer
简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
