儿童节快乐,聊聊数字的规律和同余原理

某年的6月1日是星期日。那么,同一年的6月30日是星期几?

星期是7天一个循环。所以说,这一天是星期几,7天之后同样也是星期几。而630日是在61日的29天之后:29 ÷ 7 = 4 ... 129除以7,可以得出余数为1。而61日那一天是星期日,那么,630日就是星期日的后一天,也就是星期一。

某年的3月,Wendy想制定一个实习计划,它想知道当年的7月和11月有哪几天是星期天。但月历坏了,5月后面的几页看不到了。Wendy却轻松找到了想要的日期,难道Wendy是天才喵?

不是,因为它知道,每一年的31日到330日,与111日到1130日,在星期上面是完全相同的。同样,41日到430日,与71日到730日,在星期上面也是完全相同的(31日除外)​。

这到底是怎么一回事呀?

每一年过了3月之后,在天数上,4月、6月、9月、11月都是30天,而其他的月份都是31天。
3月到10月的天数相加,得出:31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 = 245
245 ÷ 7= 35,用245除以一周的天数7天,就可以得出,31日~330日,与111日~1130日,在星期上面是完全相同的。

同样,把4月到6月的天数相加,得出:30 + 31 + 30 = 91
91 ÷ 7 = 13,就可以得出,41日到430日,与71日到730日,在星期上面也是完全相同的。

原来,数字有规律性和周期性。高斯于是提出了“同余式”的理论。

a除以m所得余数,和b除以m所得余数相同的时候,就将它写成:a ≡ b(mod m)。称为整数ab对模m同余。而上面的这个算式就是同余式。在这里,mod表示整除后取余的意思。同C语言的运算符的功能是一样的。

比如3 ≡ 1 (mod 2)27 ≡ 2 (mod 5)

同余式可以相加。

比如,当除以7的时候,1017的余数为3916的余数为210 ≡ 17(mod 7)9 ≡ 16 (mod 7)
10 + 917 + 16分别再除以7,得出的余数都是3 + 2 (5)​,也就是说:10 + 9 ≡ 17 + 16 (mod 7)

不光是相加,相减,或者相乘(乘方)​,同余式依然成立。
在这里插入图片描述
同余式和其他的等式一样,可以进行加法、减法、乘法(乘方)的运算。

求:13的2000次方除以12

13 ≡ 1 (mod12),根据同余式的性质④,能够得出:13^2000 ≡ 1^2000 ≡ 1 (mod 12)。余数为1

求:斐波那契数列中是3的倍数的项

如果用通项求:
在这里插入图片描述
可能不够优雅。

不妨根据这个数列的递推方程式,求出一开始几项的具体数字,然后将这些数字除以3,得出余数。
在这里插入图片描述
我们想要找到整数除法运算当中“余数”的周期和规律。

假设:

a n + 1 = 3 p + k a_{n+1}=3p+k an+1=3p+k
a n = 3 q + l a_{n}=3q+l an=3q+l

kl都是012三个数字当中的某个整数。

an+1除以3的余数为k,而k除以3的余数也为k,可以得出: a n + 1 ≡ k ( m o d 3 ) a_{n+1} ≡ k (mod3) an+1kmod3
同样,an除以3的余数为l,而l除以3的余数也为l,可以得出: a n ≡ l ( m o d 3 ) a_{n} ≡ l (mod3) anlmod3

根据递推方程式: a n + 2 = a n + 1 + a n a_{n+2} = a_{n+1} + a_n an+2=an+1+an

根据同余式的性质①,得出: a n + 2 ≡ a n + 1 + a n ≡ k + l ( m o d 3 ) a_{n+2} ≡ a_{n+1} + a_n ≡ k+l (mod 3) an+2an+1+ank+lmod3
也就是说,想要求出an+2除以3的余数,就必须先求出an+1an除以3的余数,然后将两个余数相加。

通过先前的表格,我们可以看出,如果连续2个余数和前面的某2个余数相同的话,那么,此后的余数都按照这个形式循环下去。

比如,第9项和第10项的余数与第1项和第2项的余数相同,所以当这个数列除以3的时候,所得出的余数的周期为8

一开始的8项当中,a4a8能够被3整除。
所以,n的条件为,n4的倍数:4,8,12,16,20,24,28,32,···

线性同余法获取伪随机数

C语言中,只要调用rand()函数,就可以得到随机数。不过,由于借助公式产生的随机数具有一定的规律性,因此并不是真正的随机数,通常称为伪随机数。

线性同余法:如果把Ri作为当前随机数的话,那么下一个出现的随机数Ri + 1就是, R i + 1 = ( a × R i + b ) m o d c R_{i+1}=(a × R_i+b) mod c Ri+1=(a×Ri+b)modc

abc各参数设定合适的整数后,可以从该公式获得的随机数的范围就是0c(不包含)​。例如,把a设定为5b设定为3c设定为8Ri的初始值定为了1
在这里插入图片描述
这些随机数确实很像是无规则随机出现的数值。不过,产生8次随机数后,下8次产生的随机数就和前面的数值相同了。这种周期性是伪随机数的特征,也是为什么不是真随机数的原因。

srand(time(NULL));可以提前设定Riabc的数值。srand()函数中的参数time(NULL),是用来获取当前时间的参数。由于每次启动程序时的当前时间都是变化的,因此Riabc的数值也会随之发生变化。Riabc的数值就称为随机数的种子。

而重复调用rand()函数的话,因为Riabc的数值都有默认值,因此每次都会生成以相同方式出现的随机数。

参考

[1] 写给全人类的数学魔法书
[2] 程序是怎样跑起来的

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

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

相关文章

最佳实践|互联网行业软件供应链安全建设的SCA纵深实践方案

在数字化转型的浪潮中,开源组件已成为企业构建云服务与应用的基石,但其引入的安全风险也日益凸显。某互联网大厂的核心安全研究团队,通过深度应用软件成分分析(SCA)技术,构建了一套覆盖开源组件全生命周期管…

Docker Compose(容器编排)

目录 什么是 Docker Compose Docker Compose 的功能 Docker Compose 使用场景 Docker Compose 文件(docker-compose.yml) Docker Compose 命令清单 常见命令说明 操作案例 总结 什么是 Docker Compose docker-compose 是 Docker 官方的开源项…

【网络安全】轻量敏感路径扫描工具

订阅专栏,获取文末项目源码。 文章目录 工具简介工具特点项目结构使用方法1.环境准备2.配置目标URL3.运行扫描4.结果查看5.自定义扩展项目源码工具简介 该工具是一款基于Python的异步敏感路径扫描工具,用于检测目标网站是否存在敏感文件或路径泄露(如配置文件、密钥、版本控…

SpringAI+DeepSeek大模型应用开发实战

内容来自黑马程序员 这里写目录标题 认识AI和大模型大模型应用开发模型部署方案对比模型部署-云服务模型部署-本地部署调用大模型什么是大模型应用传统应用和大模型应用大模型应用 大模型应用开发技术架构 SpringAI对话机器人快速入门会话日志会话记忆 认识AI和大模型 AI的发…

高温炉制造企业Odoo ERP实施规划与深度分析报告

摘要 本报告旨在为高温炉生产企业提供一个基于Odoo 18平台的企业资源规划(ERP)系统实施的全面分析与规划。报告首先系统梳理了高温炉制造业独特的业务流程特点,随后详细映射了Odoo 18各核心模块功能与这些业务需求的匹配程度。重点分析了生产…

简述什么是全局锁?它的应用场景有哪些?

全局锁是数据库管理系统中的一种特殊锁机制,用于对整个数据库实例进行加锁,使数据库处于只读状态,阻止所有数据更新(DML)、数据定义(DDL)及更新类事务提交等操作。 其核心应用场景包括&#xf…

window 显示驱动开发-呈现开销改进(二)

对共享表面的纹理格式支持 驱动程序应支持共享资源和可共享的后台缓冲区,以使用 DXGI_FORMAT 枚举中的这些附加纹理格式: DXGI_FORMAT_A8_UNORMDXGI_FORMAT_R8_UNORMDXGI_FORMAT_R8G8_UNORMDXGI_FORMAT_BC1_TYPELESS\*DXGI_FORMAT_BC1_UNORMDXGI_FORMAT…

jenkins集成gitlab实现自动构建

jenkins集成gitlab实现自动构建 前面我们已经部署了Jenkins和gitlab,本文介绍将二者结合使用 项目源码上传至gitee提供公网访问:https://gitee.com/ye-xiao-tian/my-webapp 1、创建一个群组和项目 2、添加ssh密钥 #生成密钥 [rootgitlab ~]# ssh-keyge…

barker-OFDM模糊函数原理及仿真

文章目录 前言一、巴克码序列二、barker-OFDM 信号1、OFDM 信号表达式2、模糊函数表达式 三、MATLAB 仿真1、MATLAB 核心源码2、仿真结果①、barker-OFDM 模糊函数②、barker-OFDM 距离分辨率③、barker-OFDM 速度分辨率④、barker-OFDM 等高线图 四、资源自取 前言 本文进行 …

深入解析 Redis Cluster 架构与实现(一)

#作者:stackofumbrella 文章目录 Redis Cluster特点Redis Cluster与其它集群模式的区别集群目标性能hash tagsMutli-key操作Cluster Bus安全写入(write safety)集群节点的属性集群拓扑节点间handshake重定向与reshardingMOVED重定向ASK重定向…

linux centos 服务器性能排查 vmstat、top等常用指令

背景:项目上经常出现系统运行缓慢,由于数据库服务器是linux服务器,记录下linux服务器性能排查常用指令 vmstat vmstat介绍 vmstat 命令报告关于内核线程、虚拟内存、磁盘、陷阱和 CPU 活动的统计信息。由 vmstat 命令生成的报告可以用于平衡系统负载活动。系统范围内的这…

在IIS上无法使用PUT等请求

错误来源: chat:1 Access to XMLHttpRequest at http://101.126.139.3:11000/api/receiver/message from origin http://101.126.139.3 has been blocked by CORS policy: No Access-Control-Allow-Origin header is present on the requested resource. 其实我的后…

Python训练第四十一天

DAY 41 简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化:调整一个批次的分布,常用与图像数据特征图:只有卷积操作输出的才叫特征图调度器:直接修改基础学习率 卷积操作常见流程如下: 1. 输入 → 卷积层 →…

Linux线程同步实战:多线程程序的同步与调度

个人主页:chian-ocean 文章专栏-Linux Linux线程同步实战:多线程程序的同步与调度 个人主页:chian-ocean文章专栏-Linux 前言:为什么要实现线程同步线程饥饿(Thread Starvation)示例:抢票问题 …

5.2 初识Spark Streaming

在本节实战中,我们初步探索了Spark Streaming,它是Spark的流式数据处理子框架,具备高吞吐量、可伸缩性和强容错能力。我们了解了Spark Streaming的基本概念和运行原理,并通过两个案例演示了如何利用Spark Streaming实现词频统计。…

Go 即时通讯系统:日志模块重构,并从main函数开始

重构logger 上次写的logger.go过于繁琐,有很多没用到的功能;重构后只提供了简洁的日志接口,支持日志轮转、多级别日志记录等功能,并采用单例模式确保全局只有一个日志实例 全局变量 var (once sync.Once // 用于实现…

「数据采集与网络爬虫(使用Python工具)」【数据分析全栈攻略:爬虫+处理+可视化+报告】

- 第 103 篇 - Date: 2025 - 06 - 01 Author: 郑龙浩/仟墨 文章目录 「据采集与网络爬虫」【使用工具:Python】一 数据采集1 数据采集综述(1)基本介绍(2)数据目标源(3)采集方式(4&am…

响应式系统与Spring Boot响应式应用开发

响应式系统概述 过去十年间,为应对移动和云计算的需求,软件行业通过改进开发流程来构建更稳定、健壮且灵活的软件系统。这种演进不仅服务于传统用户端(桌面/Web),还需支持多样化设备(手机、传感器等)。为应对这些挑战,多个组织共同制定了《响应式宣言》(2014年发布)…

POJO、DTO和VO:Java应用中的三种关键对象详解

在软件开发特别是Java开发中,常常会遇到POJO、DTO和VO这三类对象。它们在不同场景下扮演着重要角色,有助于优化代码结构、增强系统安全性和提升性能。本文将全面解析这三者的定义、区别及常见使用场景,帮助你更好地理解和应用。 1. POJO&…

leetcode付费题 353. 贪吃蛇游戏解题思路

贪吃蛇游戏试玩:https://patorjk.com/games/snake/ 问题描述 设计一个贪吃蛇游戏,要求实现以下功能: 初始化游戏:给定网格宽度、高度和食物位置序列移动操作:根据指令(上、下、左、右)移动蛇头规则: 蛇头碰到边界或自身身体时游戏结束(返回-1)吃到食物时蛇身长度增加…