常用数论板子

费马小定理
常用数论板子_第1张图片
欧拉定理
若正整数 a , n 互质,则 aφ(n)≡1(mod n) 其中 φ(n) 是欧拉函数(1~n) 与 n 互质的数。

费马小定理
对于质数p,任意整数a,均满足:a的p次幂≡a(mod p)

欧拉定理的推论
若正整数a,n互质,那么对于任意正整数b,有a的b次幂≡a的b mod φ(n)次幂(mod n)

(因为mod是质数,那么φ(mod)= mod-1)

快速幂:

int quick(int a,int b,int c)  
{  
    int ans=1;   //记录结果  
    a=a%c;   //预处理,使得a处于c的数据范围之下  
    while(b!=0)  
    {  
        if(b&1) ans=(ans*a)%c;   //如果b的二进制位不是0,那么我们的结果是要参与运算的  
        b>>=1;    //二进制的移位操作,相当于每次除以2,用二进制看,就是我们不断的遍历b的二进制位  
        a=(a*a)%c;   //不断的加倍  
    }  
    return ans;  
}

其中a和m要保证是互质,首先要保证最大公约数为1。更多的是下面的模板:

ll exgcd(ll a,ll b,ll &x,ll &y)//扩展欧几里得算法
{
    if(b==0)
    {
        x=1;
		y=0;
        return a;  //到达递归边界开始向上一层返回
    }
    ll gcd=exgcd(b,a%b,x,y);
    ll y1=y;    //把x y变成上一层的
    ll x1=x;
    y=x1-(a/b)*y1;
    x=y1;
    return gcd;     //得到a b的最大公因数
}
ll inv(ll a,ll mod){
	ll x,y;
	ll gcd=exgcd(a,mod,x,y);
	if(gcd!=1)return -1;
	else return (x+mod)%mod; 
}
ll inv6=inv(6,mod);//求6的逆元,求其他数的逆元同理

你可能感兴趣的:(数学,零碎知识点)