同餘定理:(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 如果經過放大後...