数学模板

关于一些数学模板

线性筛

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)!\times m!)}\)

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

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

posted @ 2019-03-27 21:09  ADMAN  阅读(143)  评论(0编辑  收藏  举报