乘方快速冪 OR 乘法快速冪

2022-05-13 10:33:51 字數 1253 閱讀 3404

關於快速冪這個演算法,已經不想多說,很早也就會了這個演算法,但是原來一直靠著模板雲裡霧裡的,最近重新學習,發現忽視了乙個重要的問題,就是若取模的數大於int型,即若為__int64的時候應該怎麼辦,這樣就得用到乘法快速冪+乘方快速冪了。

快速冪一般是為了解決乘方取模問題的,顯然思想就是二分,下面貼上快速冪模板:

1

__int64 mulpow(__int64 a,__int64 p,__int64 m)211

return

ans;

12 }

view code

但是以上**有個問題,並不適合m超過int的情況,下面提供m超過int情況的解法

1 __int64 multi(__int64 a,__int64 b,__int64 n)  //

乘法快速冪

211 a<<=1;12

if(a>=n) a-=n;

13 b>>=1;14

}15return

temp;16}

1718 __int64 mulpow(__int64 a,__int64 m,__int64 n) //

乘方快速冪

1928

return

temp;

29 }

view code

但缺點就是速度慢了點,logn*logn的,感謝南理工的《acm演算法訓練教程》

poj3761

排列組合題目,但是真不好想,看了別人的題解才做出來的,orz別人的思維,是自己太弱了

題解:這題典型的用快速乘方冪+快速乘法冪會tle的

1 #include2 #include3 #include4 #include

5 #include6 #include7 #include8

using

namespace

std;

9const

int maxn=1000001;10

__int64 a[maxn];

11const

int mod=20100713;12

__int64 mulpow(__int64 a,__int64 n,__int64 m)

1321

return

temp;22}

23int

main()

2435

return0;

36 }

view code

快速乘法 快速冪

description 從 n 個不同元素中任取 m m n 個元素,按照一定的順序排列起來,叫做從 n 個不同元素中取出 m 個元素的乙個排列。當 m n 時所有的排列情況叫全排列。你覺得 xxy 會問你全排列的個數嗎?xxy 這個問題能淹死你,我才不問呢。我 要問的是求 n 的全排列中,先遞增後...

快速冪乘法

原創作者 by 夜 深 感謝作者 在 上一直沒有找到有關於快速冪演算法的乙個詳細的描述和解釋,這裡,我給出快速冪演算法的完整解釋,用的是c 語言,不同語言的讀者只好換個位啦,畢竟讀 c的人較多 所謂的快速冪,實際上是快速冪取模的縮寫,簡單的說,就是快速的求乙個冪式的模 餘 在程式設計過程中,經常要去...

快速冪,矩陣乘法,矩陣快速冪

快速冪利用二進位制 複雜度 log級 include include include include using namespace std typedef long long ll typedef unsigned long long ull int q power int a,int b,int...