兒童節快樂,聊聊數字的規律和同余原理

某年的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+1?kmod3
同樣,an除以3的余數為l,而l除以3的余數也為l,可以得出: a n ≡ l ( m o d 3 ) a_{n} ≡ l (mod3) an?lmod3

根據遞推方程式: 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+2?an+1?+an?k+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
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83259.shtml
英文地址,請注明出處:http://en.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)吃到食物時蛇身長度增加…