传送门
几个数论板子拼一起的。。。
代码:
#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
using namespace std;
const int rlen=1<<18|1;
inline char gc(){
static char buf[rlen],*ib,*ob;
(ib==ob)&&(ob=(ib=buf)+fread(buf,1,rlen,stdin));
return ib==ob?-1:*ib++;
}
inline int read(){
int ans=0;
char ch=gc();
while(!isdigit(ch))ch=gc();
while(isdigit(ch))ans=((ans<<2)+ans<<1)+(ch^48),ch=gc();
return ans;
}
typedef long long ll;
inline int add(const int&a,const int&b,const int&mod){
return a+b>=mod?a+b-mod:a+b;}
inline int mul(const int&a,const int&b,const int&mod){
return (ll)a*b%mod;}
inline int ksm(int a,int p,const int&mod){
int ret=1;a%=mod;for(;p;p>>=1