日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数论入门学习笔记

發布時間:2023/12/31 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数论入门学习笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數論入門

  • 一、整除的性質
  • 二、模運算與同余運算
    • 1.模運算及其性質
    • 2.同余運算及其性質
  • 三、快速冪
    • 1. 快速冪
    • 2.光速冪
  • 四、最大公因數與最小公倍數
    • 輾轉相除法(歐幾里得算法)
  • 五、素數與素數篩
    • 1.素數
    • 2.素數篩
  • 六、逆元
    • 1.歐拉定理
    • 2.費馬小定理


躺在草稿箱里的大一寫的博客(個人感覺寫的還行)

一、整除的性質

1. 整除:若a%b==0,則稱a能被b整除或b能整除a,記作b | a.

2. 整除性質:

(1)若 a|b <=> -a|b <=> a|-b <=> |a| | |b|

(2)若 a|b,b|c ?\Rightarrow? a|c

(3)若 a|b,a|c ?\Rightarrow? a|(bx+cy) 其中 x,y 為任意整數

(4)若 a|b ?\Rightarrow? am | bm 其中 m 為非零整數

(5)若 a|b,b|a ?\Rightarrow? b = ±a <=> |b|=|a|

(6)若 a|bc,且 a 與 c 互質,則 a|b

(7)若a|b,a|c,且b與c互質,則a|bc

(8)若a|b,c為任意整數,則b|ac

二、模運算與同余運算

1.模運算及其性質

(1) 取模運算:a % p(a mod p),表示 a 除以 p 的余數。

(2) 模 p 加法:(a + b) % p = (a%p + b%p) % p

(3) 模 p 減法:(a - b) % p = (a%p - b%p) % p

(4) 模 p 乘法:(a * b) % p = ((a % p)*(b % p)) % p

(5) 冪模 p:(a^b) % p = ((a % p)^b) % p

(6) 模運算滿足結合律、交換律和分配律。

(7) a≡b (mod n) 表示 a 和 b 模 n 同余,即 a 和 b 除以 n 的余數相等

注意:模運算無除法,不可使用(a / b) % p = (a%p / b%p) % p,遇到除法取模時,可求其乘法逆元

2.同余運算及其性質

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

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

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

(4)同余式相加:若 a≡b(mod m),c≡d(mod m),則 a±c≡b±d(mod m);

(5)同余式相乘:若 a≡b(mod m),c≡d(mod m),則 ac≡bd(mod m)。

三、快速冪

1. 快速冪

假設要求xn ,那么原題可以很輕松的表示為:xn= (((x2)2)2…)。這樣只要做k次平方運算就能解決,時間復雜度就從O(n)下降到 log(n),只要冪運算的冪可以寫成 2k 的形式,就可以用上面的方法降低時間復雜度。所以我們可以將任意的實數n改寫有限個2k的形式的相乘。

例如假設 xn 等于 322 。x = 3, n = 22 = 10110(B),則有322 = 316 ×\times× 34×\times× 32,即310110 = 310000 ×\times× 300100×\times× 300010。

代碼樣例:

typedef long long ll; ll quick_pow(ll a, ll n) //快速冪 a^n {ll ans = 1, base = a;while (n) {if (n & 1) ans = ans * base;base = base * base; //計算1所在的位置的取值n >>= 1; //二進制右移}return ans; }

快速冪取模:

typedef long long ll; ll quick_pow(ll a, ll n, ll mod) //快速冪取模 a^n % mod {ll ans = 1, base = a;while (n) {if (n & 1) ans = ans * base % mod;base = base * base % mod; n >>= 1; }return ans; }

- 另一種理解方法:

  • 當b為偶數時,xn 可以轉為 x^2 的 b2\frac{2}2b? 次方。
  • 當b為奇數時,xn 可以轉為 x^2 的 b2\frac{2}2b? 次方,再乘以 x

代碼解釋:

ll pow(ll a,ll n) //快速冪 a^n {ll ans = 1, base = a;while(n){if(n & 1) ans = ans * base ; //n為奇數base = base * base ; //n為偶數時,底數平方n >>= 1; //指數減半}return ans; }

2.光速冪

四、最大公因數與最小公倍數

輾轉相除法(歐幾里得算法)

以除數和余數反復做除法運算,當余數為 0 時,取當前算式除數為最大公約數

  • 引入定理: gcd(a,b) = gcd(b, a %b)

gcd代碼:

int gcd(int a, int b) {int Rem;while (b > 0) {Rem = a % b;a = b;b = Rem;}return a; }

gcd代碼簡化:

int gcd(int a, int b) {return b == 0 ? a : gcd(b, a % b); }

定理:a、b 兩個數的最小公倍數乘以它們的最大公約數等于 a 和 b 本身的乘積。

  • lcm(a,b) * gcd(a,b) = a * b

在求 lcm 時,如果將 lcm 寫成 a * b / gcd(a,b),a*b 可能會溢出,正確的方法應該是先除后乘,即:lcm(a,b) = a / gcd(a,b) * b

lcm代碼:

int lcm(int a, int b) {return a / gcd(a, b) * b; }

多個數(a1, a2, a3…am)的 lcm ,先求出 a1,a2 的 lcm ,再求出 lcm(lcm(a1,a2), a3)……

五、素數與素數篩

1.素數

  • 質數是指在大于 1 的自然數中,除了 1 和它本身以外不再有其他因數的自然數

判斷素數代碼:

bool is_prime(int num) {for (int i = 2; i * i <= num; i++) {if (num % i == 0)return false;}return true; }

2.素數篩

  • 素數篩就是快速篩出素數的算法

1.1 埃篩

  • 復雜度 O(nloglogn)

埃篩代碼:

const int MAXN = 1e6 + 5; bool is[MAXN];//is[i] 1 is prime , 0 is not a prime int prime[MAXN], cnt = 0; void getprime() {memset(is, 1, sizeof(is));is[0] = is[1] = 0;for (int i = 2; i < MAXN; i++) {if (is[i]) {prime[cnt++] = i;for (int j = 2; i * j < MAXN; j++) {is[i * j] = 0;}}} }

1.2 線性篩

  • 復雜度 O(n)

線性篩代碼:

const int MAXN = 1e6 + 5; bool is[MAXN];//is[i] 1 is prime , 0 is not a prime int prime[MAXN], cnt = 0;void getprime() {memset(is, 1, sizeof(is));is[0] = is[1] = 0;for (int i = 2; i < MAXN; i++) {if (is[i]) {prime[cnt++] = i;}for (int j = 0; j < cnt; j++) {if (i * prime[j] > MAXN) //判斷數組下標是否越界break;is[i * prime[j]] = 0;if (i % prime[j] == 0) //根據最小素數因子篩除,避免重復篩選break;}} }

六、逆元

1.歐拉定理

  • 若 n,a 為正整數,且 n,a 互質,則:a ^ φ\varphiφ(n) ≡ 1(mod n)

2.費馬小定理

  • 如果 p 是一個質數,而整數 a 不是 p 的倍數,則有 a ^(p-1)≡1(mod p)

總結

以上是生活随笔為你收集整理的数论入门学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。