规律很简单,画画图就能找出来了。(q-1)*(q-2)/2
裸写乘法longlong会炸,乘法写的优雅一些或者直接用Java能过。
#include<cstdio> #include<cstring> #include<cmath> #include<queue> #include<map> #include<algorithm> using namespace std; long long q,p; long long Cheng(long long a,long long b) { long long res=0; while(b) { if(b%2==1) res=(res+a)%p,b--; a=(a*2)%p,b=b/2; } return res; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%lld%lld",&q,&p); long long x=q-2,y=q-1; y=y/2; printf("%lld ",Cheng(x,y)); } return 0; }