首页 > 其他分享 >【模板】数学

【模板】数学

时间:2022-11-16 21:04:08浏览次数:38  
标签:ma 查看 int inv exgcd 点击 数学 模板

同余

逆元

线性递推

inv[1]=1;
for(int i=2;i<=n;++i)	inv[i]=p-inv[p%i]*(p/i)%p,inv[i]%=p;

快速幂

inv[i]=ksm(i,p-2,p)

阶乘递推

inv[n]=ksm(po[n],p-2,p);//po[i]是i的阶乘
for(int i=n-1;i;--i)  inv[i]=inv[i+1]*(i+1)%p;

高次同余方程

大小步(BSGS)

点击查看代码
int bsgs(int a,int b,int p){//(a^x)%p=b%p 
	map<int,int> ha;
	int t=sqrt(p)+1;
	for(int i=0,q=b%p;i<t;++i,q=q*a%p)	ha[q]=i;
	int w=ksm(a,t,p);
	for(int i=1,q=w;i<=t;++i,q=q*w%p)
		if(ha.find(q)!=ha.end())	return t*i-ha[q];
	return -1;
}

拓展大小步(EX-BSGS)

点击查看代码
int bsgs(int a,int b,int p,int ad){
	unordered_map<int,int> ha;
	int t=sqrt(p)+1;
	for(int i=0,j=b%p;i<t;++i,j=j*a%p)	ha[j]=i;
	int w=ksm(a,t,p);
	for(int i=1,j=ad*w%p;i<=t;++i,j=j*w%p)
		if(ha.find(j)!=ha.end())	return i*t-ha[j];
	return -1;
}
int exbsgs(int a,int b,int p){
	a%=p,b%=p;
	int cnt=0,ad=1,t;
	if(b==1 || p==1)	return 0;
	while((t=__gcd(a,p))!=1){
		if(b%t!=0)	return -1;
		++cnt,b/=t,p/=t,ad=ad*(a/t)%p;
		if(ad==b)	return cnt;
	}
	t=bsgs(a,b,p,ad);return (t==-1?-1:t+cnt);
}

中国剩余定理

CRT

点击查看代码
int CRT(){
	int m=1,res=0,x,y;
	for(int i=1;i<=n;++i)	m*=a[i];
	for(int i=1;i<=n;++i){
		int tmp=m/a[i];
		exgcd(tmp,a[i],x,y);
		res=(res+tmp*x*b[i]%m)%m;
	}
	return (res%m+m)%m;
}

EX-CRT

点击查看代码
const int N=1e5+5;
int a[N],b[N],n;
int exgcd(int a,int b,int &x,int &y){
	if(!b){x=1,y=0;return a;}
	int g=exgcd(b,a%b,x,y),t=x;
	x=y,y=t-a/b*y;
	return g;
}
int excrt(){
	int A=a[1],B=b[1];
	for(int i=2;i<=n;++i){
		int k1,k2;
		int g=exgcd(A,a[i],k1,k2);
		if((b[i]-B)%g!=0)	return -1;
		k1*=(b[i]-B)/g;
		k1=(k1%(a[i]/g)+(a[i]/g))%(a[i]/g);
		B=k1*A+B,A=(A*a[i])/g;
	}
	return B%A;
}

线性代数

消元

高斯消元

点击查看代码
void Guass(){
	for(int i=1;i<=n;++i){
		int ma=i;
		for(int j=i+1;j<=n;++j)if(fabs(a[j][i])>fabs(a[ma][i]))ma=j;
		if(i!=ma)	swap(a[i],a[ma]);
		if(fabs(a[i][i])<eps){cout<<"No Solution\n";return;}
		d div=a[i][i];
		for(int j=i;j<=n+1;++j)	a[i][j]/=div;
		for(int j=i+1;j<=n;++j){
			div=a[j][i];
			for(int k=i;k<=n+1;++k)	a[j][k]-=div*a[i][k];
		}
	}
	for(int i=n;i;--i){
		ans[i]=a[i][n+1];
		for(int j=i-1;j;--j)a[j][n+1]-=(a[j][i]*ans[i]);
	}
	for(int i=1;i<=n;++i)printf("%.2lf\n",ans[i]);
}

高斯-约旦 消元

点击查看代码
void Guass_Jordan(){
	for(int i=1;i<=n;++i){
		int ma=i;
		for(int j=i+1;j<=n;++j)if(fabs(a[j][i])>fabs(a[ma][i]))ma=j;
		for(int j=1;j<=n+1;++j)swap(a[i][j],a[ma][j]);
		// cout<<ma<<" : ";
		if(fabs(a[i][i])<eps){cout<<"No Solution";return;}
		for(int j=1;j<=n;++j){
			if(j==i)	continue;
			for(int k=i+1;k<=n+1;++k)a[j][k]-=a[i][k]*a[j][i]/a[i][i];
		}
	}
	for(int i=1;i<=n;++i)printf("%.2lf\n",a[i][n+1]/a[i][i]);
}

约数

拓展欧几里得定理(exgcd)

点击查看代码
int exgcd(int a,int b,int &x,int &y){
	if(!b){x=1,y=0;return a;}
	int g=exgcd(b,a%b,x,y),t=x;
	x=y,y=t-a/b*y;
	return g;
}

线性筛法求欧拉函数

点击查看代码
void init(int n){
	for(int i=2;i<=n;++i){
		if(!vi[i])	pr[++co]=i,phi[i]=i-1;
		for(int j=1;j<=co && i*pr[j]<=n;++j){
			vi[pr[j]*i]=1;
			if(i%pr[j]==0){
				phi[pr[j]*i]=phi[i]*pr[j];
				break;
			}
			else	phi[i*pr[j]]=phi[i]*(pr[j]-1);
		}
	} 
}

标签:ma,查看,int,inv,exgcd,点击,数学,模板
From: https://www.cnblogs.com/yolanda-yxr/p/16897467.html

相关文章

  • 【模板】快速沃尔什变换 FWT
    解决形如\[c_k=\sum_{i\oplusj=k}a_ib_j.\]的卷积式子,这里解决\(\oplus=\{\cup,\cap,\text{xor}\}\)。#include<cstdio>#include<cstring>#include<algorithm>u......
  • 模板奇异递归+扩展方法
    #include<iostream>template<classderived>structbase{derivedgetDerivedType(){};voidinterface(){static_cast<derived*>(this)->interface();};};s......
  • Aspose.Words利用Word模板导出Word文档
       今天工作中遇到了导出Word文档的问题,但是在搜索Aspose.Words导出Word文档时发现网上的方法都是有头没尾的,有的只有一小段实例,让人看着摸不着头脑。借着https://w......
  • 第7章 类模板array和vector、异常捕获(笔记)
    7.1简介数据结构7.2array对象一组具有相同类型、连续的内存区域,用下标法和索引来操作。7.3array对象的声明array<类型,大小>array对象名7.4使用array对象的例子......
  • 高中数学之比较大小
    例1\(\quad\)已知\(a=0.7e^{0.4}\),\(b=e\ln{1.4}\),\(c=0.98\),则\(a\),\(b\),\(c\)的大小关系是(A)A.\(\;a>c>b\)\(\quad\)B.\(\;b>a>c\)\(\quad\)C.\(\;b>c>a\)\(\quad\)D.......
  • 尚硅谷vue课程之模板语法
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......
  • P8436 【模板】边双连通分量
    P8436【模板】边双连通分量//这个是看边和点,而不是看点和点#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+5;constintM=2e6+5;inth[N],ne[M<<1......
  • 4.django-模板
    在django中,模板引擎(DTL)是一种可以让开发者将服务端数据填充到html页面中的完成渲染的技术模板引擎的原理分为以下三步:在项目配置文件中指定保存模板文件的的模板目录,一......
  • P8435 【模板】点双连通分量
    P8435【模板】点双连通分量#include<bits/stdc++.h>usingnamespacestd;constintN=5e5+5;constintM=4e6+6;inth[N],ne[M],e[M],tot;voidadd(intfrom,int......
  • Word13 《经费联审结算单》模板office真题
    1.根据题目一的要求,打开素材文件,点击【文件】-【另存为】,选择【当前文件夹】,命名为Word。   2.根据题目二的要求,在【布局】里点击【页面设置】的右下角,打开页面设......