同餘模定理

2021-07-10 08:30:16 字數 1685 閱讀 7083

定義:•    所謂的同餘,顧名思義,就是許多的數被乙個數d去除,有相同的餘數。d數學上的稱謂為模。如a=6,b=1,d=5,則我們說a和b是模d同餘的。因為他們都有相同的餘數1。

•      數學上的記法為:

•      a≡ b(mod d)

•      可以看出當n•      (1) a和b是模d同餘的.

•      (2) 存在某個整數n,使得a=b+nd .

•      (3) d整除a-b.

•      可以通過換算得出上面三個說話都是正確而且是等價的.

定律:•    同餘公式也有許多我們常見的定律,比如相等律,結合律,交換律,傳遞律….如下面的表示:

•      1)a≡a(modd)

•      2)a≡b(modd)→b≡a(mod d)

•      3)(a≡b(modd),b≡c(mod d))→a≡c(mod d)

•      如果a≡x(modd),b≡m(mod d),則

•      4)a+b≡x+m (mod d)

•      5)a-b≡x-m(mod d)

•      6)a*b≡x*m(mod d )

應用:•    (a+b)%c=(a%c+b%c)%c;

•    (a*b)%c=(a%c*b%c)%c;

•    對於大數的求餘,聯想到進製轉換時的方法,得到

•    舉例如下,設大數 m=1234,模n

•    就等於((((1*10)%n+2%n)%n*10%n+3%n)%n*10%n+4%n)%n

大數求餘的簡單模板:

•    #include//大數求餘,其中n(除數)不是大數

char a[1000];

int main()

int i,j,k,m,n;

return 0;

} poj2635

題目描述:

•    給定乙個大數k,k是兩個大素數的乘積的值。(4<= k <= 10^100 )

•    再給定乙個int內的數l (2 <=l <= 10^6 )

•    問這兩個大素數中最小的乙個是否小於l,如果小於則輸出這個素數。

解題思路:

•    1、  char格式讀入k。把k轉成千進製kt,同時變為int型。

•    把數字往大進製轉換能夠加快運算效率。若用十進位制則耗費很多時間,會tle。

•    千進製的性質與十進位制相似。

•    2、  高精度求模。

•    主要利用kt陣列和同餘模定理。

•    例如要驗證123是否被3整除,只需求模123%3

•    但當123是乙個大數時,就不能直接求,只能通過同餘模定理對大數「分塊」間接求模

•    (a+b)%c=(a%c+b%c)%c;

•    (a*b)%c=(a%c*b%c)%c;

•    具體做法是:

•    先求1%3 = 1

•    再求(1*10+2)%3 = 0

•    再求 (0*10+3)% 3 = 1

•    那麼就間接得到123%3=0,這是顯然正確的

•    而且不難發現, (1*10+2)*10+3 = 123

•    這是在10進製下的做法,千進製也同理,*10改為*1000就可以了

同餘模定理

原文 同餘模定理 定義 所謂的同餘,顧名思義,就是許多的數被乙個數 d 去除,有相同的餘數。d 數學上的稱謂為模。如 a 6,b 1,d 5,則我們說 a 和 b 是模 d 同餘的。因為他們都有相同的餘數 1 數學上的記法為 a b mod d 可以看出當 n d 的時候,所有的 n 都對 d 同商...

ACM同餘模定理(模版)

今天將同餘模定理重新好好看了一下。同餘模定理 所謂的同餘,顧名思義,就是許多的數被乙個數d去除,有相同的餘數。d數學上的稱謂為模。如a 6,b 1,d 5,則我們說a和b是模d同餘的。因為他們都有相同的餘數1。有很多定理,但是我們只需要用到兩個,其餘的太過簡單就不再敘述。應用 a b c a c b...

同餘模定理的應用

一 公式 同餘模定理 a b mod a mod b mod mod a b mod a mod b mod mod 二 應用 求s description s n n 5 求s n 除以3的餘數 input 每行輸入乙個整數n,0 n 1000000 注意n的範圍,int long long in...