数学模板

关于一些数学模板

线性筛

for(int i=2;i<=n;++i){
	if(!f[i])pri[++tot]=i;
	for(int j=1;j<=tot&&pri[j]*i<=n;++j){
		f[pri[j]*i]=1;
		if(i%pri[j]==0)break;
	}
}

n!分解质因数

void fj(int x){
	for(int i=1;i<=tot;i++){
        int tp=x;
        while(tp)sum[i]+=tp/pri[i],tp/=pri[i];
    }
}

(varphi(x)=x(1-1/p_1)(1-1/p_2).....(1-1/ p_n))

关于exgcd

求ax+by=c的一个特殊解

void exgcd(ll a,ll b,ll &d,ll &x,ll &y){
	if(b==0){d=a;x=1;y=0;return;}
	exgcd(b,a%b,d,x,y);
	ll tmp=x;
	x=y;y=tmp-a/b*y;
}

推导过程:

//ax+by=gcd(a,b)
//bx1+(a%b)y1=gcd(b,a%b)
//ax+by=bx1+(a%b)y1
//ax+by=bx1+(a-b*a/b)y1
//ax+by=bx1-b*a/b*y1+ay1
//ax+by=b(x1-a/b*y1)+ay1
//x=y1 y=x1-a/b*y1

费马小定理 a^(p-1)≡1(mod p)p为质数

排列数公式:(P^m_n=frac{n!}{(n-m)!})

组合数公式:(C^m_n=frac{n!}{((n-m)! imes m!)})

(C_n^m=C_{n-1}^{m-1}+C_{n-1}^{m})

n个数分成m段(可为空)方案数为(C_{n+m-1}^{m-1})

原文地址:https://www.cnblogs.com/ADMAN/p/10610749.html