POJ 1006 中國剩餘定理

2021-06-19 11:40:04 字數 1409 閱讀 3590

初見poj1006用的暴力破解寫的**,寫完以後發現很搓。上網一查原來古人早就對此類問題有了解答規則。

一、中國剩餘定理

一元線性同餘方程組問題最早可見於中國南北朝時期(公元5世紀)的數學著作《孫子算經》捲下第二十六題,叫做「物不知數」問題,原文如下:

有物不知其數,三三數之剩二,五五數之剩三,七七數之剩二。問物幾何?

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

宋朝數學家

秦九韶於2023年《數書九章》卷

一、二《大衍類》對「物不知數」問題做出了完整系統的解答。明朝數學家程大位將解法編成易於上口的《孫子歌訣》:

三人同行七十希,五樹梅花廿一支,七子團圓正半月,除百零五使得知

這個歌訣給出了模數為3、5、7時候的同餘方程的秦九韶解法。意思是:將除以3得到的餘數乘以70,將除以5得到的餘數乘以21,將除以7得到的餘數乘以15,全部加起來後除以105,得到的餘數就是答案。比如說在以上的物不知數問題裡面,使用以上的方法計算就得到

因此按歌訣求出的結果就是23.

大致過程是:

n1*5*7%3=1,則n1最小為2;2*5*7=70.

n2*3*7%5=1,則n2最小為1;1*3*7=21.

n3*5*3%7=1,則n3最小為1;1*3*5=15.

n%3=2; 

n%5=3;

n%7=2;

所以n=(70*2+21*3+15*2)%(3*5*7)=233%105=23.

二、求解

有了上邊的演算法,求解poj1006就很簡單啦。由題意我們很容易得到:

(n+d)%23=p;

(n+d)%28=e;

(n+d)%33=i;

並且,若a%b=c, k為正整數,則k*a%b=(k*c)%b

33*28%23=4,則6*33*28%23=4*6%23=1;  6*33*28=5544

23*33%28=3,則19*23*33%28=19*3%28=1;   19*23*33=14421

28*23%33=17,則2*28*23%33=2*17%33=1;  2*28*23=1288

23、28、33互質,最小公倍數23*28*33=21252

(5544*p+14421*e+1288*i)%21252=n+d

**如下:

#include "stdafx.h"

#includeusing namespace std;

int _tmain(int argc, _tchar* argv)

for(int i=0;i

poj 1006(中國剩餘定理)

中國剩餘定理 孫子算經 中有 物不知數 問題 今有物不知其數,三三數之餘二 五五數之餘三 七七數之餘二,問物幾何?答為 23 這個就是傳說中的 中國剩餘定理 其實題目的意思就是,n 3 2,n 5 3,n 7 2 問n是多少?那麼他是怎麼解決的呢?看下面 題目中涉及 3,5,7三個互質的數 令 5 ...

poj 1006 中國剩餘定理

根據單因子構件湊成法 能對於變化的餘數都能快速求解 思想 求出23,28,33三個互素 前提 的分別餘數為一的情況,就介紹式一的情況,其他兩式同理可得。式一 x滿足被28和33整除,除以23餘1,這就意味著在28和33的公倍數下找被23除餘1的數,經過計算器嘗試,28 33 k 23 1 k 6 x...

POJ 1006 中國剩餘定理

問題描述 人自出生起就有體力,情感和智力三個生理週期,分別為23,28和33天。乙個週期內有一天為峰值,在這一天,人在對應的方面 體力,情感或智力 表現最好。通常這三個週期的峰值不會是同一天。現在給出三個日期,分別對應於體力,情感,智力出現峰值的日期。然後再給出乙個起始日期,要求從這一天開始,算出最...