同餘定理 快速冪

2021-08-13 18:12:19 字數 1246 閱讀 7609

同餘定理:(a*b)%c == ((a%c)*b)%c == ((a%c * b%c)%c

證明(前一種): (a*b - a%c*b )為c的 倍數即可 提取b得到 b(a-a%c) 易知其為 c的  倍數 ,得證          

一、一般的冪次取餘 (主要利用(a*b)%c == ((a%c)*b)%c)

ll normal_mod(ll a, ll b, ll c)

return ans;

}

二、介紹快速冪

快冪演算法1

這裡我們需要兩個公式:

這兩個公式都不難理解,自己可以驗證一下,3^4 = 9^2。

有了這兩個公式之後我們就可以考慮思路了。

我們就以b為偶數來舉例。

a^b%c = ((a^2)^b/2)%c;

在這裡我們假設b/2還是偶數,那麼

((a^2)^b/2)%c = (((a^2)^2)^(b/2)/2)%c;到這裡就可以了.

快速冪演算法2

ll bin_pow(ll a, ll b)

while(b != 0)

a *= a;

b >>= 1;

} return ans;

}

二、快速冪 + 取餘

我們先將b按2進製展開假設b = 10, 那麼b的二進位制為1010,也就是0*2^0+1*2^1+0*2^2+1*2^3 = 10;

所以 a^b = a^(0*2^0+1*2^1+0*2^2+1*2^3 ) = a^(2^1) * a(2^3);這種簡單的轉換在初中就學過了吧,相信大家都懂

所以a^b%c = a^(2^1) * a(2^3) % c =( a^(2^1) % c) * (a(2^3)%c)%c;

ll pow_mod(ll a, ll b, ll c)

b >>= 1;

a = (a*a)%c;

} return ans;

}

快速冪及同餘定理

同餘定理 給定乙個正整數m,如果兩個整數a和b滿足 a b 能夠被m整除,即 a b m得到乙個整數,那麼就稱整數a與b對模m同餘,記作a b mod m 性質 1傳遞性 若a b mod m b c mod m 則a c mod m 2同余式線性運算 若a b mod m c d mod m 則a...

數數 (數學)(快速冪 同餘定理)

數數 問題描述 小 star 還不會數數。有一天他看到了一張奇怪的數表,上面的每乙個數各自都由相同數字構成,比如 11111111 66666 於是他想自己從 1 慢慢數到這個數字。多少 star 有個很不好的習慣,每數到一定個數就會從頭開始數起。現在請你幫忙求出,他最後數出來的數是多少。輸入 第一...

Judge 快速冪 同餘

時間限制 1 sec 記憶體限制 128 mb 提交 1011 解決 125 統計吃了乙個放大果實 惡魔果實的一種 高呼 海賊王 俺 ocean每使用一次能力,就可以將乙個物品的價值放大 x 倍 原價值乘以 x 但是哪有這麼好的事情?物品的價值是有限度的,姑且認為物品的價值上界為 m 如果經過放大後...