存一些数学用的模板

来源:互联网 发布:c语言求真值表 编辑:程序博客网 时间:2024/05/23 11:10
//ax+by=dvoid gcd(LL a,LL b,LL& d,LL& x,LL& y){    if(!b){d=a;x=1;y=0;}    else{gcd(b,a%b,d,y,x);y-=x*(a/b);}}
// a^p mod nLL pow_mod(LL a,LL p,LL n){    if(p==0) return 1;    LL ans=pow_mod(a,p/2,n);    ans=ans*ans%n;    if(p%2==1) ans=ans*a%n;    return ans;}

// a mod n 的逆LL inv(LL a,LL n){    LL d,x,y;    gcd(a,n,d,x,y);    return d==1?(x+n)%n:-1;}

// 解模方程a^x=b(mod n) n为素数int log_mod(int a,int b,int n){    int m,v,e=1,i;    // printf("ddddd\n");    m=(int)sqrt(n+0.5);    v=inv(pow_mod(a,m,n),n);   // printf("log_mod ok\n");    map<int,int>x;    x[1]=0;    for(i=1;i<m;i++)    {        e=mul_mod(e,a,n);        if(!x.count(e))x[e]=i;    }    for(i=0;i<m;i++)    {        if(x.count(b))return i*m+x[b];        b=mul_mod(b,v,n);    }    return -1;}


0 0
原创粉丝点击