同余问题

同余问题

同余问题数论问题中很重要的一部分

欧几里得算法

int gcd(int a,int b){
    if(!b) return a;
    return gcd(b,a%b);
}

拓展欧几里得算法

void exgcd(int a,int b,int x,int y,int &gcd){
    if(!b){
        x=1;y=0;gcd=a;
        return;
    }
  int t=y; exgcd(b,a
%b,x,y,gcd); y=(b-a/b*b)*x; x=t; }

逆元

如果 a*b%p==1 那么a与b互为模p意义下的逆元,那么逆元的作用是什么呢?

n/a%p==n*b%p(可以自行理解)

拓欧求逆元

a*b%p==1 => a*b+k*p==1(用拓展欧几里得可以轻易得到答案)

void exgcd(int a,int b,int x,int y,int &gcd){
    if(!b){
        x=1;y=0;gcd=a;
        return;
    }
    exgcd(b,a%b,x,y,gcd);
    int t=y;
    y=(b-a/b*b)*x;
    x=t;
}

int getinv(int a,int p){
    exgcd(a,p,x,y,gcd);
    if(gcd!=1) return -1;
    return (x%p+p)%p
}

中国剩余定理

中国剩余定理是要求一个满足上述等式的最小值

对于等式一,假设已有 t%m1==a1,如果想要满足所有的等式,则需要 x%m2==0,x%m3==0......

猜你喜欢

转载自www.cnblogs.com/yulinss/p/11700842.html