1. 程式人生 > >模運算與同餘公式的性質

模運算與同餘公式的性質

       所謂的同餘,顧名思義,就是許多的數被一個數d去除,有相同的餘數。d數學上的稱謂為模。如a=6,b=1,d=5,則我們說a和b是模d同餘的。因為他們都有相同的餘數1。
       數學上的記法為:
       a≡ b(mod d)
       可以看出當n<d的時候,所有的n都對d同商,比如時鐘上的小時數,都小於12,所以小時數都是模12的同商.
對於同餘有三種說法都是等價的,分別為:
       (1) a和b是模d同餘的.
       (2) 存在某個整數n,使得a=b+nd .
       (3) d整除a-b.
       可以通過換算得出上面三個說法都是正確而且是等價的.
       基本定律:


       同餘公式也有許多我們常見的定律,比如相等律,結合律,交換律,傳遞律….如下面的表示:
       1)a≡a(mod d)
       2)對稱性 a≡b(mod d)→b≡a(mod d)
       3)傳遞性 (a≡b(mod d),b≡c(mod d))→a≡c(mod d)
       如果a≡x(mod d),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 )
           7)a/b≡x/m (mod d)
       8)a≡b(mod d)則a-b整除d
       9)a≡b(mod d)則a^n≡b^n(mod d)
      10)如果ac≡bc(mod m),且c和m互質,則a≡b(mod m)
      模運算的運算規則:

      (a + b)  mod  p = (a  mod  p + b  mod  p)  mod  p            (1)
      (a - b)  mod  p = (a  mod  p - b  mod  p)  mod  p              (2) 
      (a * b)  mod  p = (a  mod  p * b  mod  p)  mod  p              (3)
      a^b  mod  p = ((a  mod  p)^b)  mod  p                              (4)
      結合率: ((a+b)  mod  p + c)  mod  p = (a + (b+c)  mod  p)  mod  p (5)
                     ((a*b)  mod  p * c) mod  p = (a * (b*c)  mod  p)  mod  p     (6)
      交換率: (a + b)  mod  p = (b+a)  mod  p                 (7)
                     (a * b)  mod  p = (b * a)  mod  p                 (8)
      分配率: ((a +b) mod  p * c)  mod  p = ((a * c)  mod  p + (b * c)  mod  p)  mod  p (9)
      重要定理:若a≡b ( mod  p),則對於任意的c,都有(a + c) ≡ (b + c) ( mod p);(10)
                        若a≡b ( mod  p),則對於任意的c,都有(a * c) ≡ (b * c) ( mod p);(11)
                        若a≡b ( mod  p),則對於任意的c,都有ac≡ bc ( mod p);     (13)

相關推薦

運算公式性質

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

運算運算的區別

1.取模運算多見於計算機領域,取餘運算一般用於數學領域。 2.取模運算(取餘運算)計算步驟 ①求整數商 c=a/b ②求模(餘數)r=a-c*b 3.兩者不同點:取模運算c向負無窮遠處取整,取餘運算c

運算和取運算

對於整型數a,b來說,取模運算或者求餘運算的方法都是: 1.求整數商: c = a/b; 2.計算模或者餘數: r = a - c*b.   求模運算和求餘運算在第一步不同: 取餘運算在取c的值時,向0方向舍入(fix()函式);而取模運算在計算c的值時,向-∞方向舍入(f

運算

關於位與運算&與取餘今天在研究hashmap原始碼的時候,發現其原始碼中在解決Entry分佈時,本來大多數人以為會用index = hash % length,但是原始碼中卻使用了index = hash & (lenth -1)的方式。 /** * The default initi

HDU 2035 人見人愛A^B(基本性質

原題連結:Here!思路:可以利用同餘的基本性質 ab ≡ (a%m)(b%m) (mod m) ,也非常好證明。  設 a = k1*m + c1 , b = k2*m + c2 ( k1,k2

方程(擴充套件歐幾里得)

同餘應該是數論中比較基礎的一個東西了。感覺挺重要的。。。高中沒學好到大學來補了。 涉及3個數,a,b,m。就是a % m == b % m. 可以寫成:a  b(mod m)。 一、同餘及其一些性質 同餘有一些顯然性質,有的時候會有很大功效。(不列舉了,一般書上都有的

[搬運]關於擴充套件歐幾里得方程

什麼是GCD? GCD是最大公約數的簡稱(當然理解為我們偉大的黨也未嘗不可)。在開頭,我們先下幾個定義: ①a|b表示a能整除b(a是b的約數) ②a mod b表示a-[a/b]b([a/b]在Pascal中相當於a div b) ③gcd(a,b)表示a和b的最大公

運算和求運算的區別

通常情況下取模運算(mod)和求餘(rem)運算被混為一談,因為在大多數的程式語言裡,都用'%'符號表示取模或者求餘運算。在這裡要提醒大家要十分注意當前環境下'%'運算子的具體意義,因為在有負數存在的情況下,兩者的結果是不一樣的。 對於整型數a,b來說,取模運算或者求餘運

String 說明 java的取運算和取運算

String是一個不可變類,具體參照原因說明String s0 = "hello";String s1 = "hello";String s2 = "he"+"llo";System.out.println(s0 == s1);System.out.println(s0 ==

擴充套件歐幾里得(exgcd)詳解

exgcd入門以及同餘基礎 gcd,歐幾里得的智慧結晶,資訊競賽的重要演算法,數論的...(編不下去了 講exgcd之前,我們先普及一下同餘的性質: 若,那麼 若,,且p1,p2互質, 若,k和c為整數,而且k>0,那麼 若,那麼就可以推出,則有

算術

以下三條常用式子: (a+b)modn=((amodn)+(bmodn))modn (a-b)modn=((amodn)-(bmodn)+n)modn abmodn=(amodn)(bmodn)modn 大整數取模: scanf("%s%d",n,&m); int len=strlen

運算

取模運算(“Modulo Operation”)和取餘運算(“Complementation ”)兩個概念有重疊的部分但又不完全一致。主要的區別在於對負整數進行除法運算時操作不同。取模主要是用於計算機術

運算及其基本性質(證明)

首先一點是,a≡b(modm) 的原型是 amodm=b 線性運算 a≡b(modm)c≡d(modm)}⇒{a±c≡b±d(modm)a×c≡b×d(modm) 證明: m|a−b,m|c−

【題解】[牛客網NOIP賽前集訓營-提高組(第五場)]A.方程 位運算

#include<cstdio> #include<algorithm> using namespace std; typedef long long ll; const ll mod=998244353; ll m,l1,l2,r1,r2; ll

逆元

同餘 前置知識 ————擴充套件歐幾里得定理 什麼是同餘 對於兩個數a,b,它們對於p取模結果相同,那麼就稱a和b在對p取模意義下同餘 公式表達a≡b(mod)p 如何求一個數的同餘 利用擴充套件歐幾里得定理 我們將該公式轉化一下 -> a%p == b%p

【Matlab】mod(取)(rem)

mod VS rem Matlab 中, 區分mod(取模)與取餘(rem)操作. 二者的區別如下 作用於 (a, b) 當 a 和 b 都是正數的時候, 二者結果一樣, 常規操作 當任何一個位置出現負數的時候, 先按正數算出結果的絕對值. 然後對於結果 mod

的區別

轉載地址:https://blog.csdn.net/coder_panyy/article/details/73743722    其實取模和取餘在目標上是一致的,但是因為語言對取餘和取模上定義的不同,導致得到的結果不同。 對取餘和取模定義不同的語言中,兩者的不同點只有

關於取運算(mod)和求(rem)運算

通常情況下取模運算(mod)和求餘(rem)運算被混為一談,因為在大多數的程式語言裡,都用’%’符號表示取模或者求餘運算。在這裡要提醒大家要十分注意當前環境下’%’運算子的具體意義,因為在有負數存在的情況下,兩者的結果是不一樣的。 對於整型數a,b來說,取模運算或者求餘運算的方法都是: 

隨機數生成器線性法產生隨機數

隨機數生成器與線性同餘法產生隨機數 1、隨機數生成器與/dev/random: 隨機數生成器,顧名思義就是能隨機產生數字,不能根據已經產生的數預測下次所產生的數的“器”(器存在軟體與硬體之分),真正的隨機數生成器其產生的隨機數具有隨機性、不可預測性、不可重現性。 什麼是真正的隨機數生成器

運算(%)和按位運算(&)

最近看了看HashMap原始碼,覺得裡面的一個按位與運算用的很優雅,記錄一下。 jdk7中,HashMap是“陣列+連結串列”的結構,為了讓HashMap裡的元素分佈的更加均勻,就要在陣列中給每個元素一個合適的位置,求模運算是一個不錯的方法,但是,jdk7中使用了一種更加優雅的方法,原始碼中的方法