template<class T> T fast_mod(T a,T b,T Mod){ if(b==0) return 1; T ans=1,base=a; while(b!=0){ if(b&1)ans=(ans*base)%Mod; base=(base*base)%Mod; b>>=1; } return ans; } //求 x^2 = a mod(n)的最小整数解x ,n,为素数 //返回-1表示无解 int modsqr(int a,int n){ int b,k,i,x; if(n==2) return a%n; if(fast_mod(a,(n-1)/2,n)==1){ if(n%4==3) x=fast_mod(a,(n+1)/4,n); }else { for(b=1;fast_mod(b,(n-1)/2,n)==1;b++); i=(n-1)/2; k=0; do{ i/=2; k/=2; if((fast_mod(a,i,n)*(long long )fast_mod(b,k,n)+1)%n==0) k+=(n-1)/2; }while(i%2==0); x=(fast_mod(a,(i+1)/2,n))*(long long)fast_mod(b,k/2,n)%n; if(x*2>n) x=n-x; return x; } return -1; }