沟槽的组合变形

给定数 p,mp 是质数,求

i=0p1(2ii)mimodp

多测,T1041m<p1014


忽略 p=2 的情况,对 (2nn) 变形:

(2nn)=2n1×3×5××(2n1)n!(2)ni=1n(p+12i)n!(4)ni=0n1(p12i)n!(4)n(p12n)

原式即

i=0p1(4m)i(p12i)

二项式定理

(14m)p12

时间复杂度 O(Tlogp)


#include<bits/stdc++.h>
#define ll long long
#define N 2000010
using namespace std;
ll read(){
ll x=0,w=1;char ch=getchar();
while(!isdigit(ch)){if(ch=='-')w=-1;ch=getchar();}
while(isdigit(ch))x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x*w;
}
ll p,m;
ll mul(ll x,ll y){
return (__int128)x*y%p;
}
ll qpow(ll k,ll b){
ll ret=1;
while(b){
if(b&1)ret=mul(ret,k);
k=mul(k,k),b>>=1;
}
return ret;
}
void solve(){
p=read(),m=read();
if(p==2ll)return puts("1"),void();
ll t=((1ll-4ll*m)%p+p)%p;
printf("%lld\n",qpow(t,(p-1ll)/2));
}
int main(){
int T=read();
while(T--)solve();
return 0;
}

本文作者:SE の 摆烂窝

本文链接:https://www.cnblogs.com/SError0819/p/18423387

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   SError  阅读(7)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起