初遇數論

      這是我寫的第一份博客,以後會堅持寫下去。我是一隻菜鳥,不求能寫出精緻的文章,只是想借助CSDN這個載體把自己學到的知識在這裏記錄一下順便鞏固一下;

     這是我暑假留校的第二週,第一週學習的是C語言進階,第二週學習的是數論的部分知識,感覺數論的知識難以理解,因此在這裏重點寫一下數論的知識,順序是學長所講內容的從後往前寫;

好了步入正題:在講算法之前先總結一下需要提前掌握的概念:

①同餘式:同餘式是數論的基本概念之一,設m是給定的一個正整數,a、b是整數,若滿足m|(a-b),則稱a與b對模m同餘,記爲        a≡b(mod m),或記爲a≡b(m)。這個式子稱爲模m的同餘式,若m∤ (a-b),則稱a、b對模m不同餘,同餘概念又常表達爲:

   1.a=b+km(k∈Z);

   2.a和b被m除時有相同的餘數。 同餘式的記號由高斯(Gauss,C.F.)於1800年首創,發表在他的數論專著《算術研究》之中。

                                                                                 --------------引自《百度百科》

②取模運算規則

  1. (a + b) % p = (a % p + b % p) % p 

  2. (a - b) % p = (a % p - b % p) % p 

  3. (a * b) % p = (a % p * b % p) % p 

  4. a ^ b % p = ((a % p)^b) % p

 

  值得注意的是這裏並沒有關於(a / b) % p 的運算規則。

 

③乘法逆元:

若ax≡1 mod f, 則稱a關於1模f的乘法逆元爲x。也可表示爲a * x≡1(mod f)。另外可以寫成 a * x = bf + 1;

那麼爲什麼要有乘法逆元呢?這裏就要提到上面的取模運算規則 ,我也在上文提到 取模運算沒有關於 (a / b) % m 的運算規則,那麼當 a 於 b 都很大是怎麼辦呢? 就要提到 乘法逆元了 對於 a 的乘法逆元 x,x  % m =(1 / a)% m 及可以將 (a / b) % m 轉換爲:

(x  % m * b%m)% m 這樣就解決了a與b過大的問題;那麼該怎麼求乘法逆元呢?別急下面進入數論的算法整理。

 

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章