平方剩余
Posted 033000-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平方剩余相关的知识,希望对你有一定的参考价值。
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; }
以上是关于平方剩余的主要内容,如果未能解决你的问题,请参考以下文章