我的数学库
来源:互联网 发布:mac os windows双系统 编辑:程序博客网 时间:2024/05/22 13:40
以下为一些模板
include
排列
组合
筛素数
欧几里得
扩展欧几里得
模方程
中国剩余定理
快速幂
欧拉函数
乘法逆元…
#include<cstdio>#include<iostream>#include<cmath>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue>#include<vector>#include<map>#define LL long long#define INF 1000000000#define eps 1e-10#define sqr(x) (x)*(x)#define pa pair<int,int>#define cyc(i,x,y) for(int i=(x);i<=(y);i++)#define cy2(i,x,y) for(int i=(x);i>=(y);i--)using namespace std;inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();} return x*f;}#define N 1000#define mod 1000000007int C[N][N]; void make_C(){ C[0][0]=1; cyc(i,0,N-1) { C[i][0]=C[i][i]=1; cyc(j,1,i-1)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod; }}int fac[N],A[N][N];void make_A(){ fac[0]=1; cyc(i,1,N-1)fac[i]=fac[i-1]*i%mod; cyc(i,1,N-1)cyc(j,1,i)A[i][j]=fac[i]/fac[i-j];}int top,prime[N+10];bool is_prime[N+10];void make_prime(){ memset(is_prime,true,sizeof is_prime); int M=(int)sqrt(N+0.5); is_prime[1]=false;//注意 1是合数 cyc(i,1,M)if(is_prime[i]) for(int j=i*i;j<=N;j+=i)is_prime[j]=false; cyc(i,1,N)if(is_prime[i])prime[++top]=i; }LL gcd(LL a,LL b){return b==0?a:gcd(b,a%b);}void gcd(LL a,LL b,LL& d,LL& x,LL& y){ if(!b){d=a;x=1;y=0;return ;}//d!=a则无解 gcd(b,a%b,d,x,y);y-=x*(a/b);}void GCD(){ LL a=rand(),b=rand(),ans,x,y,d; ans=gcd(a,b); //辗转相除法 gcd(a,b,d,x,y);//扩展欧几里得 }LL pow(LL a,LL b){//-------------递归版--------- // if(!b)return 1;// LL ans=pow(a,b/2);// ans=ans*ans%mod;// if(b&1)ans=ans*a%mod;// return ans; //----------------------------//-------------循环版--------- LL r=1,tmp=a; while(b) { if(b&1)r=r*tmp%mod; tmp=tmp*tmp%mod; b<<=1; } return r;//---------------------------- }LL china(int n,int *A,int *M){ LL m=1,d,y,x=0; cyc(i,1,n)m*=M[i]; cyc(i,1,n) { LL w=m/M[i]; gcd(M[i],w,d,d,y); x=(x+y*w*A[i])%m; } return (x+m)%m;}void MOD(){ LL ans,x,y,a=rand(),b=rand(); gcd(a,mod,b,x,y);//ax=b(mod p) int n=rand(),A[N+10],M[N+10];//n个模方程组 x=A[i](mod M[i]) x=china(n,A,M);//中国剩余定理 pow(a,b); //a^b%mod 快速幂 }int euler_phi(int x){ int m=(int)sqrt(x+0.5); int ans=x; cyc(i,2,m)if(x%i==0) { ans=ans/i*(i-1); while(x%i==0)x/=i; } if(x>1)ans=ans/x*(x-1); return ans;}int phi[N+10];void phi_table(int n){ cyc(i,2,n)phi[i]=0; phi[1]=1; cyc(i,2,n)if(!phi[i]) for(int j=i;i<=n;j+=i) { if(!phi[j])phi[j]=j; phi[j]=phi[j]/i*(i-1); }}LL mul_inv(LL a){ LL d,x,y; gcd(a,mod,d,x,y); return d==1? (x+mod)%mod:-1;}LL inv[N+10];void inv_table(int n){ inv[0]=inv[1]=1; cyc(i,2,n)inv[i]=((mod/i+1)*inv[i-mod%i])%mod;}void EULER(){ euler_phi(rand());//计算单个phi(x) phi_table(N);//phi(1)...phi(n) mul_inv(rand());//单个乘法逆元 inv_table(N);//inv(1)...inv(n) }int main(){ make_C();//组合 make_A();//排列 make_prime();//素数表 GCD();//欧几里得&其扩展 MOD();//模方程&快速幂 EULER();//欧拉函数&乘法逆元 return 0;}
0 0
- 我的数学库
- 我的数学建模
- 我的趣味数学书单
- 我的组合数学讲义
- 我的数学之伤
- 我需要答案,数学的
- 我的数学建模历程
- 张益唐:我的数学人生
- 我的3D引擎数学库头文件
- 我的3D引擎数学库实现文件
- 我研究数学的经验 丘成桐 院士
- 我的7年数学奥利匹克回想
- 我对学习数学的感觉
- 我的数学观--大学前
- 我的第一次数学建模大赛
- 我的数学建模之路
- Strongart:我自学数学的非常故事
- 6.1 我所知的全部数学内容
- JavaScript的基本数据类型的父级
- 图形渲染优化、渲染管线优化、图形性能优化
- The import javax.servlet cannot be resolved解决办法
- 1001 害死人不偿命的(3n+1)猜想 PAT
- jquery文档操作函数大全
- 我的数学库
- 轻松学习JavaScript十三:JavaScript基于面向对象之继承(包含面向对象继承机制)
- Android RecyclerView使用详解三
- ExpandListView 如何增加子项的onLongClick事件
- 2015广工校赛 I Stubird说这是水题
- oracle pl/sql 函数
- android绑定服务方法使用
- 应届生需提前学习的知识点及推荐书籍
- Longest Substring Without Repeating Characters