999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

孫子定理的Python簡單分析與應用

2022-05-25 19:57:54王薇王德貴
電腦報 2022年19期

王薇 王德貴

孫子定理,是中國古代求解一次同余式組的方法,是數論中一個重要定理,又稱為中國剩余定理、中國余數定理,它也是數論四大定理(威爾遜定理、費馬小定理、孫子定理、歐拉定理)之一。

一元線性同余方程組問題最早見于中國南北朝時期(公元5世紀)的數學著作《孫子算經》卷下第二十六題,叫作“物不知數”問題,原文:

有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。問物幾何?即,一個整數除以三余二,除以五余三,除以七余二,求這個整數。《孫子算經》中首次提到了同余方程組問題,以及以上具體問題的解法,因此在中文數學文獻中也會將中國剩余定理稱為孫子定理。

用現代數學的語言來說明的話,孫子定理給出了以下的一元線性同余方程組:

,其中m、m…m兩兩互素。

整數x同余于a1模m1,即x%m1 = a1%m1,……

方程組一般用構造法求出x的最小整數解。由于求解方法中的理論比較難于理解,后面再做詳述。

對于整數,數學家們一直很熱衷于整除、因數、余數和素數等方面的研究,因而也出現了數論四大定理等很多相關的定理和猜想。在這四大定理之中,我們已經用Python驗證了費馬小定理和威爾遜定理,今天我們就利用Python由簡單入手,來求解孫子定理相關的問題。

設計思路是由淺入深,先研究兩個條件的簡單問題求解方法,然后在此基礎上,再討論多個條件的情況,最后討論孫子定理及應用。

程序設計涉及的是等級考試四級和二級內容。

(1)余同加余

一數除以3余1,除以4余1,求這數。

這個數減去1,即是3的倍數,也是4的倍數,那就是12的倍數,即x =12k +1,那么最小值為13。

(2)和同加和

一數除以3余2,除以4余1,求這數。

這個數減去2,是3的倍數,可能是2,5,8……,這個數減去1是4的倍數,可能是1,5,9……,余數為5時相同。則根據上一條件,可以將問題修改為除以3余5,除以4余5,則x =12k +5,最小值為17。同時我們發現模和余數的和相等,因此稱為和同加和。

(3)差同減差

一數除以3余1,除以4余2,求這數。

仿照上例,這個數減去1,是3的倍數,余數還可能是-2,-5,-8……,這個數減去2是4的倍數,-2,-6,-10……我們看到模與余數和差相同,所以x =12k -2,最小值為10。稱為差同減差。

(4)其他情況

一數除以3余1,除以4余3,求這數。

沒有上述3個題目的特點,非特殊情況,我們采用枚舉法。即在第一個條件下,x=3k+1,那么依次將k值加1,再求出x除以4的余數,如果余數為3,x即為所求。x值依次為4,7,10,13,16,19,22……那么7,19……均滿足條件,取最小值為7。

(5)程序設計

根據前面的分析,四種情況的程序如圖1。

測試結果如下,這是有兩個條件下的求解。顯示兩個列表元素,是為了我們分析方便(圖2)。

在兩個條件的基礎上,擴展到三個及三個以上的條件時,也可以用枚舉法,則需要解決以下問題。

(1)輸入數據:多組數據存儲在列表中,m存儲模,a存儲余數。因為輸出條件不定,所以用while循環,以回車結束輸入。

然后比較余數和模,如果余數大于模,重新輸入數據。

(2)判斷互素:多組模值,依次判斷是否兩兩互素。可以根據最大公約數來判斷。

(3)枚舉:通過枚舉滿足第一個條件的數,依次判斷是否滿足其他條件。當所有的條件都滿足,則終止循環,輸出x值。

根據以上分析,編寫程序如圖3。

驗證結果(圖4)。

韓信帶1500名兵士打仗,戰死四五百人,站3人一排,多出2人;站5人一排,多出3人;站7人一排,多出2人,還有士兵多少人?

這是一道經典的問題,前面已經求出滿足條件的最小值為23。因為士兵應該在1000多人左右,所以再加上3×5×7=105的倍數就可以了,所以加上1050,韓信的士兵人數為1073人。

如果采用枚舉法求解,根據題意,損失人數是400-500之間,因此剩余士兵人數應該在1000-1100人之間,結果是1073人。程序和測試結果如下(圖5)。

現在我們回到正題,利用孫子定理求解的方法。

(1)同余定理

最先引用同余的概念與符號者為德國數學家高斯。同余理論是初等數論的重要組成部分,是研究整數問題的重要工具之一。

兩個整數a、b,若它們除以大于1的正整數m所得的余數相等,則稱a與b對于模m同余或a同余于b模m。

記作:a≡b (mod m),

讀作:a同余于b模m,或讀作a與b對模m同余,例如26≡2(mod 12)。

顯然,有如下性質:

1)若a≡0(mod m),則m|a(m整除a,a被m整除);

2)a≡b (mod m),則a-b≡0(mod m),a-b|m。

3)反身性:a≡a (mod m);

4)對稱性:若a≡b(mod m),則b≡a (mod m);

5)傳遞性:若a≡b(mod m),b≡c(mod m),則a≡c(mod m);

6)同余式相加:若a≡b(mod m),c≡d(mod m),

則a±c≡b±d(mod m);ac≡bd(mod m)。

(2)孫子定理內容

正整數m1、m2…mn兩兩互素,對a1、a2…an的同余方程組為:

(3)程序設計

為了方便大家理解,我們分步設計程序。

①最大公約數

為了判斷模的互素,自定義函數求最大公約數(圖6)。

②判斷互素(圖7)

遍歷列表m,通過自定義函數,判斷是否互素時調用最大公約數函數,如果為1,則為互素。

③求mi乘積M

遍歷列表m,求各項的積(圖8)。

④求Mi=M/mi存入列表Mi[ ]中(圖9)

⑤求Mi逆元(數論倒數)存儲在列表Mi_[ ]中

求逆元的方法,也是遍歷。當然也可以用庫方法,這里不再研究(圖10)。

⑥求Mi[i]Mi_[i]a[i]乘積的累加存入變量x,并計算結果(圖11)

⑦定義模和余數列表,并調用自定義函數,輸出結果(圖12)

⑧測試結果(圖13、圖14)

與前測試結果相同。

完整程序,如圖15。

三、測試與改進

孫子定理的敘述較好理解,主要是逆元求法。其實思路是模(mi)的整倍數(k)加余數(ai)被Mi整除的最小值。

程序可以將模列表和對應的余數列表,通過輸入獲得。則將上面程序從第44行開始,換成下列程序即可(圖16)。

測試結果與之前相同(圖17)。

有關中國剩余定理問題、數論四大定理問題網上資料非常豐富,有興趣的同學可以參考相關資料,本文不作詳細介紹。如有不當之處,還請各位同仁、朋友斧正。

主站蜘蛛池模板: 欧美福利在线| 国产一区二区三区精品久久呦| 久久免费视频6| 91色在线观看| 久久综合干| 全裸无码专区| 四虎永久免费地址| 五月婷婷综合网| 国产综合另类小说色区色噜噜 | 99久久亚洲精品影院| 无码综合天天久久综合网| lhav亚洲精品| 日韩高清中文字幕| 国产一级无码不卡视频| 亚洲午夜福利在线| 亚洲伊人电影| 亚洲日韩国产精品综合在线观看| 丁香婷婷综合激情| 五月婷婷中文字幕| 97视频在线观看免费视频| A级毛片无码久久精品免费| 亚洲成a人片在线观看88| 国产第一页免费浮力影院| 久久婷婷人人澡人人爱91| 伊人久综合| 亚洲av色吊丝无码| 88av在线看| 中文字幕波多野不卡一区| 青青国产成人免费精品视频| 中文字幕在线永久在线视频2020| 亚洲综合九九| 青青青视频蜜桃一区二区| 日韩a在线观看免费观看| 人妻出轨无码中文一区二区| 亚洲国产天堂久久综合| 在线观看免费人成视频色快速| 亚洲区第一页| 亚洲欧洲国产成人综合不卡 | 国产精品视频导航| 国产喷水视频| 青草视频网站在线观看| 国产真实乱子伦视频播放| 99性视频| 国产成人精品一区二区| 久久99精品国产麻豆宅宅| 国产一国产一有一级毛片视频| 色综合天天操| 免费播放毛片| 中文字幕自拍偷拍| 综合五月天网| 国产成人资源| 久久婷婷六月| 露脸一二三区国语对白| 久久这里只有精品66| 国产精品无码久久久久久| 99精品国产自在现线观看| 少妇精品久久久一区二区三区| 九色在线观看视频| 亚洲v日韩v欧美在线观看| 国产粉嫩粉嫩的18在线播放91| 婷婷午夜影院| 99久久精彩视频| 国产大全韩国亚洲一区二区三区| 欧美成人二区| 亚洲伊人久久精品影院| 亚洲侵犯无码网址在线观看| 亚洲国产中文综合专区在| 亚洲成年网站在线观看| 国产精品无码AV片在线观看播放| 最新亚洲av女人的天堂| 狼友视频一区二区三区| 无码精品福利一区二区三区| 九九线精品视频在线观看| 亚洲av无码专区久久蜜芽| 99热这里只有免费国产精品| 免费黄色国产视频| 欧美日韩福利| 欧美国产日韩在线播放| 欧美日韩午夜| 国产第一页屁屁影院| 三区在线视频| 亚洲看片网|