數論 快速冪,素數篩

2021-10-03 00:25:28 字數 967 閱讀 7441

int

qupow

(int a,

int b,

int m)

return ans;

}

位運算**為

int

qupow

(int a,

int b,

int m)

return ans;

}

快速冪將原來0(b)的時間複雜度降為了o(logb)

首先我們在一般方式求素數時,可以採用以下方式

bool

ifprime

(int x)

return

true

;}

為何用ii<=x; 因假如乙個數x=nm,那麼n和m必定有乙個小於x/2;所以在x/2前不存在能整除x的整數,那麼x就一定是素數。

在做題中如果需要判斷大量的數,如還用上述方法將使效率大大降低,這種情況下可以選擇使用素數篩,素數篩也就是在查詢數之前將所有的數都判斷好是否為素數,存於陣列,等輸入要判斷的數時就可直接通過陣列記錄來判斷出是否為素數。

時間複雜度為 o(nloglogn)

bool v[maxn+5]

;memset

(v,true

,sizeof

(v))

;for

(int i=

2;i<=n;i++

)}

普通素數篩有很多陣列都被重複遍歷,所以可以採用線性篩,也稱尤拉篩。

尤拉篩的時間複雜度為o (n)

bool v[maxn+5]

;int prime[maxn+5]

;void

isprime()

}}

數論2 素數篩

判斷素數可通過試除小於 sqrt n 的素數來實現,那麼將其反過來,只要將 sqrt n 的素數的倍數都刪掉,那麼就能得到一張 n 的素數表,o n lg lg n 需劃掉合數,所以最初假設均為素數,即陣列初始化為0 bool composite maxn void generate int n f...

數論 快速冪

快速冪 演算法介紹演算法利用了二分的思想,可以達到o logn 可以把b按二進位制展開為 b p n 2 n p n 1 2 n 1 p 1 2 p 0 其中p i 0 i n 為 0 或 1 這樣 a b a p n 2 n p n 1 2 n 1 p 1 2 p 0 a p n 2 n a p ...

數論 快速冪

沒看懂,先記著 轉 typedef long long ll ll mod ll qpow ll a,ll n 計算a n mod return re mod struct matrix 定義乙個結構體,方便傳遞值 maxn和mod由全域性定義,其中mod根據需要可以省去 matrix mat mu...