快速冪 模板及應用

2022-05-20 04:32:51 字數 1184 閱讀 6515

一.快速冪模板

int powermod(int a,int b,int

mod)

returnt;}

//(a^b)%mod

view code

參考:鏈結1

鏈結2二.取模運算的性質:

(1)(a+b)%c=(a%c+b%c)%c

(2)(ab)%c=(a%c)(b%c)%c

三.相關題目

n

oip2013tg d1t1轉圈遊戲

不難得出

ans=(x+m*10^k)%n

由資料範圍,使用快速冪來做

1 #include2 #include3

4long

long powermod(int a,int b,intc)5

14return

t;15}16

17int

main()

18

view code

bzoj1008越獄

題目鏈結

首先我認為題目的表述有些值得商榷的地方,「

每個犯人可能信仰其中一種

」,是否包含不信仰宗教的情況? 正確答案中是按照每個人都信仰一種宗教來做的。

一共會有m^n種情況。由於直接求會發生越獄的情況數較麻煩,故可以先算不會越獄的情況:第一間有m種選擇,第二間則有(m-1)種選擇(不與第一間相同),以此類推,根據乘法原理,共有m*(m-1)^(n-1)種情況

則ans=m^n-m*(m-1)^(n-1)

由於1<=m<=10^8,1<=n<=10^12,所以需要使用快速冪

1 #include2

3const

int mod=100003;4

long

long

m,n,tmp,cnt;56

int powermod(long

long a,long

long b,long

long

c)15

return

i;16}17

18int

main()

19

view code

矩陣 快速冪及應用

一 快速冪部分 求a b,如下。include using namespace std int quickpow int x,int y return ans int main 其中 位移運算,就是把y轉換為 二進位制數 整體向右移一位,高位補零,最低位消失,通常右移一位就等價於y除以2再賦給b。可...

模板 快速冪

1.萌新的話 快速冪主要是用來解決一些超時間複雜度的冪運算。其主要思想是根據乙個結論 2 n 4 n 2 這樣原本暴力的o n 演算法優化為了o logn 的演算法了。時間複雜度 2.include include include include include using namespace st...

快速冪(模板)

對於任何乙個整數的模冪運算 a b c 對於b我們可以拆成二進位制的形式 b b0 b1 2 b2 2 2 bn 2 n 這裡我們的b0對應的是b二進位制的第一位 那麼我們的a b運算就可以拆解成 a b0 a b1 2 a bn 2 n 對於b來說,二進位制位不是0就是1,那麼對於bx為0的項我們...