模板 2018-01-17 快速冪 快速乘
阿新 • • 發佈:2019-02-15
快速冪太常用了, 單開一篇.
舉例!
2^100 %100
4^50 %100
16^25 %100
16^24 *16 %100
256^12 *16 %100
(256%100)^12 *16 %100
56^12 *16 %100
3136^6 *16 %100
(3136%100)^6 *16 %100
36^6 *16 %100
1296^3 *16 %100
(1296%100)^3 *16 %100
96^3 *16 %100
96^2 *16*96 %100
9216^1 *1536 %100
(9216%100)^1 *(1536%100) %100
16^1 *36 %100
576%100
76
大概是這麼個樣子.(矇混過關的原因是剛剛舉例全部打錯了, 不打啦!)
應用的原理是, 如果我想計算兩個數的積之後取模的結果, 可以分別把兩個數取模再相乘
同理我想計算一百萬個數的積(就是冪嘛), 我可以把這一百萬個數都取個餘然後再乘.
關於如何降次,上面有舉例的.
模板如下:
long long int quick_pow(long long int a,long long int p,long long int mod) {//計算(a^p)%mod long long int res=1; a=a%mod; while(p) { if(p&1) res=res*a%mod; p>>=1; a=(a*a)%mod; } return res; }
還有一個東西,叫做快速乘
原理很像的.
模板如下
long long int quick_multi(long long int a,long long int p,long long int mod)
{//計算(a*p)%mod
long long int res=0;
a=a%mod;
p=p%mod;
while(p)
{
if(p&1)
res=(res+a)%mod;
p>>=1;
a=(a+a)%mod;
}
return res;
}
好有愧疚感啊, 這麼點東西都能水一篇.