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

article/2025/8/7 11:32:06

某年的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.hkcw.cn/article/ixSVFGhAlB.shtml

相关文章

视觉分析明火检测助力山东化工厂火情防控

视觉分析技术赋能化工厂火情防控:从山东事故看明火与烟雾检测的应用价值 一、背景:山东化工事故中的火情防控痛点 近期,山东高密友道化学有限公司、淄博润兴化工科技有限公司等企业接连发生爆炸事故,暴露出传统火情防控手段的局…

javaEE->多线程:定时器

一. 定时器 约定一个时间,时间到了,执行某个代码逻辑(进行网络通信时常见) 客户端给服务器发送请求 之后就需要等待 服务器的响应,客户端不可能无限的等,需要一个最大的期限。这里“等待的最大时间”可以用…

HTML表单

1. 什么是表单 表单常用格式 文本框 密码框 单选按钮 复选框 列表框 按钮 多行文本域 文件域 邮箱 网址 数字 滑块 搜索框 2. 表单的高级应用 隐藏域(⭐) 隐藏域在网页中会经常被使用,比如我们登录了以后需要持续使用我们的登录信息&#xff…

STM32F407寄存器操作(ADC非连续扫描模式)

1.前言 书接上回,在看手册的时候我突然发现手册上还描述了另一种ADC扫描模式,即非连续扫描模式,想着连续扫描模式都已经探索过了,那就顺手把非非连续模式研究一下吧。 2.理论 我们先看看手册,这里我就以规则通道举例…

老年照护实训室建设方案设计:基础照护与专业护理实训

老年照护实训室的建设是提升老年照护人才培养质量的关键环节,其方案设计需精准对接基础照护与专业护理的实训需求,为学习者构建理论与实践深度融合的教学场景。点击获取实训室建设方案 一、建设背景与目标 (一)建设背景 随着人…

C语言 — 文件

目录 1.流1.1 流的概念1.2 常见的的流 2.文件的打开和关闭2.1 fopen函数2.2 fclose函数2.3 文件的打开和关闭 3.文件的输入输出函数3.1 fputc函数3.2 fgetc函数3.3 feof函数和ferror函数3.4 fputs函数3.5 fgets函数3.6 fwrite函数3.7 fread函数3.8 fprintf函数3.9 fscanf函数 4…

13. springCloud AlibabaSeata处理分布式事务

目录 一、分布式事务面试题 1.多个数据库之间如何处理分布式事务? 2.若拿出如下场景,阁下将如何应对? 3.阿里巴巴的Seata-AT模式如何做到对业务的无侵入? 4.对于分布式事务问题,你知道的解决方案有哪些?请你谈谈? 二、分布式事务问题…

java多线程与JUC

进程线程 进程:进程是操作系统分配资源的基本单位。在电脑中,一个软件就是一个进程 线程:线程是CPU调度的基本单位,是进程内的执行单元。相当于一个软件中的不同功能 多线程程序的特点:程序可以同时去做多件事&#…

GCC 下载安装

下载 官网:GCC, the GNU Compiler Collection- GNU Project Cygwin linux 环境 MinGW 在 Windows 上提供 GNU 开发工具比 Cygwin 更轻量(不模拟完整的 POSIX 环境)选择:binaries选择mingw-w64

GpuGeek如何成为AI基础设施市场的中坚力量

AI时代,算力基础设施已成为支撑技术创新和产业升级的关键要素。作为国内专注服务算法工程师群体的智算平台,GpuGeek通过持续创新的服务模式、精准的市场定位和系统化的生态建设,正快速成长为AI基础设施领域的中坚力量。本文将深入分析GpuGeek…

DAY 35 超大力王爱学Python

知识点回顾: 三种不同的模型可视化方法:推荐torchinfo打印summary权重分布可视化进度条功能:手动和自动写法,让打印结果更加美观推理的写法:评估模式 作业:调整模型定义时的超参数,对比下效果。…

MYOJ_4149:(洛谷P1002)[NOIP 2002 普及组] 过河卒(坐标型DP)

题目描述 棋盘上 A 点有一个过河卒,需要走到目标 B 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 C 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。 棋盘用坐标表示&#xff0…

Java高效处理大文件:避免OOM的深度实践

​关键痛点​:当加载10GB的CSV文件时,Files.readAllLines()抛出OutOfMemoryError,该如何解决? 在Java中处理大文件是开发中的高频场景,尤其在大数据、日志分析等领域。本文将深入探讨几种高效处理大文件的方案&#x…

Word双栏英文论文排版攻略

word写双栏英文论文的注意事项 排版首先改字体添加连字符还没完呢有时候设置了两端对齐会出现这样的情况: 公式文献 等我下学期有时间了,一定要学习Latex啊,word写英文论文,不论是排版还是公式都很麻烦的,而Latex一键就…

esp-idf ubuntu环境配置

常用命令 source ~/esp/esp-idf/export.shidf.py --list-targets idf.py set-target 将清除 build 目录,并重新生成 sdkconfig 文件,原来的 sdkconfig 文件保存为 sdkconfig.old。 idf.py build idf.py flashNo module named pip wget https://bootst…

BFS入门刷题

目录 P1746 离开中山路 P1443 马的遍历 P1747 好奇怪的游戏 P2385 [USACO07FEB] Bronze Lilypad Pond B P1746 离开中山路 #include <iostream> #include <queue> #include <cstring> using namespace std; int n; int startx, starty; int endx, endy; …

Cypress + TypeScript + Vue3

🚀 从零构建 Cypress + TypeScript + Vue3 组件测试环境【详细实战教程】 组件测试是前端开发中不可忽视的一环,它能够帮助我们在开发阶段就发现 UI 与交互逻辑问题。本文将带你手把手搭建基于 Cypress + TypeScript + Vue3 的组件测试环境,包含完整目录结构、配置文件、组…

车辆检测算法在爆炸事故应急响应中的优化路径

视觉分析赋能车辆管控&#xff1a;以山东应急场景为例 背景&#xff1a;应急场景下的车辆管控痛点 近期山东多起爆炸事故暴露了应急响应中的车辆管理短板&#xff1a;消防车、救护车因违停车辆堵塞通道&#xff0c;违规车辆闯入事故核心区&#xff0c;传统监控系统依赖人工识别…

【小沐杂货铺】基于Three.JS绘制太阳系Solar System(GIS 、WebGL、vue、react,提供全部源代码)第2期

&#x1f37a;三维数字地球系列相关文章如下&#x1f37a;&#xff1a;1【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐学GIS】基于C绘制三维数字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第二期3【小沐学GIS】…

π0论文阅读

https://www.physicalintelligence.company/download/pi0.pdf 模型输出的token&#xff0c;接diffusion模型&#xff0c;相比自OpenVLA那样的回归模型解码出action&#xff0c;输出更快&#xff0c;精度也会更高。 一、动作专家模块与流匹配&#xff08;Flow Matching&#xf…