BZOJ 1965 洗牌 快速乘 快速冪

2022-09-17 10:36:08 字數 621 閱讀 7878

題面略。

題解:

一看這種題,看資料就知道找規律。我們發現:變換的規律為 (1->2,2->4,3->6,4->1,5->3,6->5)  則 pos[a]=a*2%(n+1)。

所以設答案為 x,則x*(2^m)=l%(n+1)  ,這裡就要用到逆元和快速冪了。

還有這裡要注意,資料範圍為 10^10,所以要用快速乘,否則會爆。

**如下:

1 #include2

#define ll long long

3using

namespace

std;

4 ll mul(ll a,ll b,ll m) //

和快速冪思想一樣,把乘數二進位制分解,然後加起來511

ll qpow(ll a,ll b,ll m)

1218

intmain()

19

view code

加油加油加油!!!fighting fighting fighting!!!

標籤: dp

加油加油加油!!!fighting fighting fighting!!!

快速冪 快速乘

直接求解,需要迴圈b次。思路 將b轉化為二進位制。對應為1的次數的冪保留,只需要將保留的冪的結果進行乘積就是a b。class solution def fast self,a,b b bin b 2 res 1for i in b 1 if i 1 res res a a a return res...

快速乘,快速冪

老是忘記還是寫下來記錄一下 快速乘,和快速冪都是防止爆int,或long long,如果爆longlong可以選擇兩者結合,或者使用 int128 上網搜了還是不懂 例題 include iostream using namespace std int main b b 2 a a a m cout...

快速冪 快速乘

快速冪等演算法都是基於二進位制優化的演算法,本文不做過多敘述,在此只是留下模板,並介紹 o 1 快速乘 int qpow int a,int b,int p define qword long long qword qmul qword a,qword b,qword p 利用 a b pmod p...