題面略。
題解:
一看這種題,看資料就知道找規律。我們發現:變換的規律為 (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 #include2view code#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
加油加油加油!!!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...