Siyao模板库.docx
- 文档编号:7706389
- 上传时间:2023-01-25
- 格式:DOCX
- 页数:21
- 大小:25.15KB
Siyao模板库.docx
《Siyao模板库.docx》由会员分享,可在线阅读,更多相关《Siyao模板库.docx(21页珍藏版)》请在冰豆网上搜索。
Siyao模板库
Siyao@Sphinx模板库
目录
NumberTheroy1
1、mul_mod同余乘:
避免乘法溢出1
2、GCD算法:
求两数最大公约数已经测试2
3、EX_GCD扩展欧几里德:
递归求ax+by=gcd(a,b)=d的一组解x,y.效率:
o(logn).2
4、CF_GCD连分数方法解ax=gcd(a,b)mod(b)以及ax+by=gcd(a,b)=d.2
5、msolve(),inv()模线性方程和逆元:
解ax=b(modn).2
6、pow_mod()快速幂取模:
返回a^nmodp3
7、同余一元方程组(2个):
返回是否有解,解为x=m(moda)已经测试FZU14023
8、同余一元方程组(剩余定理):
x=ai(modbi),bi两两互素。
得到x=x0(modb1……bn)3
9、同余一元方程组(一般情况):
不停合并两方程3
10、log()离散对数(模为素数):
返回满足a^x=b(modn)的最小解,无解返回-14
11、mlist()筛法得素数表:
intprim[]中保存素数,pnum保存个数,hash可以用bool型4
12、pfact()分解素因子:
intpf[]中保存素因子intlim[]保存幂次,pfnum保存个数5
13、phi(),phis()欧拉函数:
phi求1-n中与n互素的数的个数;phis求1-n所有数的phi5
14、square_free()筛法生成Square-free数:
intsf[]中存结果,shh[]中存因子数(以便进行容斥)6
15、序列中互质的m元组(容斥原理square-free):
m元组最大公约数为1已经测试TJU31216
16、区间与数互质(容斥原理dfs):
求[1,r]区间中与x互质的数的个数已经测试TJU33176
17、区间与区间互质(容斥原理square-free):
求[1,x],[1,y]互质的对数7
18、区间与区间互质(容斥原理dfs):
求[1,x],[1,y]互质的对数7
19、枚举约数及对应的欧拉函数:
已经测试HDU25887
20、欧拉函数加速递归函数取模:
已经测试POJ2720TJU33137
21、阶乘中素数的阶已经测试FZU17538
22、C(N,M)modP组合数取模已经测试HIT28138
23、n!
(cop)modP阶乘中与素数互素的部分模p9
24、n!
n!
n!
/n!
n!
n!
n!
多阶乘乘除模k(k为square-free数)9
25、n!
(con)&invmodk阶乘与k互素部分ff以及逆元fv打表已经测试FZU18339
26、sum_mod等比数列求和取模10
27、floor,ceil高斯函数:
取上下整已经测试SGU10610
28、一次不等式求整数解:
L= 29、二元一次方程求整数解对: ax+by+c=0xl= 30、素数测试之miller-rabin: 返回false则一定是合数已经测试PKU181110 31、素数测试函数: isprime(n)11 32、Pollard-rho算法对合数找到一个因数已经测试PKU181111 33、分解为素因子的积: 利用Pollard-rho算法(n为1特殊处理了)12 34、Farey逼近分数: 得到分母 35、Pell方程: x^2-dy^2=1的解12 36、带限制可重排列: 13 NumberTheroy 1、mul_mod同余乘: 避免乘法溢出 typedef__int64ll; typedefconst__int64cll; llmul_mod(lla,llb,cll&n){//二进制思想已经测试PKU1811 llans(0),tmp((a%n+n)%n);b=(b%n+n)%n;//b%=n; while(b){ if(b&1)if((ans+=tmp)>=n)ans-=n; if((tmp<<=1)>=n)tmp-=n; b>>=1; }returnans; } 2、GCD算法: 求两数最大公约数已经测试 欧几里得算法.适用非负整数.效率: o(logn). llgcd(lla,llb){ if(! a)returnb;if(! b)returna; while(a>b? a%=b: b%=a);returna+b; } llgcd(lla,llb){return(b==0? a: gcd(b,a%b));} llgcd(lla,llb){if(b)while(b^=a^=b^=a%=b);returna;} 二进制算法.避免了模运算.大整数时效率较高.o(logn) llgcd(lla,llb){ if(! a)returnb;if(! b)returna; if(! (a&1)&&! (b&1))returngcd(a>>1,b>>1)<<1; elseif(! (b&1))returngcd(a,b>>1); elseif(! (a&1))returngcd(a>>1,b); elseif(a } 3、EX_GCD扩展欧几里德: 递归求ax+by=gcd(a,b)=d的一组解x,y.效率: o(logn). voidgcd(lla,llb,ll&d,ll&x,ll&y){//已经测试FZU1402 if(! b){d=a;x=1;y=0;} else{gcd(b,a%b,d,y,x);y-=a/b*x;} } 4、CF_GCD连分数方法解ax=gcd(a,b)mod(b)以及ax+by=gcd(a,b)=d. a/b= h[-2]=0,h[-1]=1,k[-2]=1,k[-1]=0; llcfgcd(lla,llb){//getxofax=d(modb)已经测试FZU1402 intc[40],l=0; llx1=0,x=1,p=b; while(b){c[l++]=a/b;a%=b;a^=b^=a^=b;} for(inti=0;i returnl&1? p-x: x; } voidgcd(lla,llb,ll&d,ll&x,ll&y){x=cfgcd(a,b);d=a*x%b;if(! d)d=b;y=(a*x-d)/b;} 5、msolve(),inv()模线性方程和逆元: 解ax=b(modn). 不定方程: ax+by=c特解为x0=x*c/d,y0=y*c/d通解x=x0+b/d*t,y=y0-a/d*t 也就是解ax+ny=b的x的通解对模n的剩余系。 答案在c[]数组中。 llmsolve(lla,llb,lln,llc[]){//besuren>0返回剩余系的个数 lld,x,y;gcd(a,n,d,x,y);if(b%d)return0; for(x=((b/d)*x)%(n/d),i=0;i returnd; } b=1时x为a的逆元 llinv(lla,lln){//无逆元返回-1 lld,x,y;gcd(a,n,d,x,y); returnd==1? (x%n+n)%(n/d): -1; } 6、pow_mod()快速幂取模: 返回a^nmodp 乘法部分需要自己写mul_mod(a,b,p)(a*b%p)避免溢出。 效率o(logn)。 llpow_mod(lla,lln,llp){ llans (1),d(a%p); while(n){ if(n&1)ans=mul_mod(ans,d,p);//ans=((longlong)ans*d)%p; d=mul_mod(d,d,p);//d=((longlong)d*d)%p; n>>=1; } returnans; } 7、同余一元方程组(2个): 返回是否有解,解为x=m(moda)已经测试FZU1402 boolcombm(ll&a1,ll&m1,lla2,llm2){//k1m1+a1=k2m2+a2=>k1m1-k2m2=a2-a1 lld,x,y,m,a;gcd(m1,m2,d,x,y);if((a2-a1)%d)returnfalse; //while(a1%m2! =a2)a1+=m1;m1*=m2/d;returntrue;//暴力也可以 m2/=d;x=(x%m2)*((a2-a1)/d%m2)%m2;//小心溢出 a1=x*m1+a1;m1*=m2;a1=(a1%m1+m1)%m1; returntrue; } 8、同余一元方程组(剩余定理): x=ai(modbi),bi两两互素。 得到x=x0(modb1……bn) llchina(lla[],llb[],intn){//解同余方程已经测试FZU1402 lltmp=1,x,y,d,ans=0; for(inti=0;i for(inti=0;i gcd(tmp/b[i],b[i],d,x,y); ans=(ans+tmp/b[i]*x*a[i])%tmp; } return(ans+tmp)%tmp; } llchina(lla[],llb[],intn){//试除已经测试FZU1402 llans=a[0]%b[0],tmp=b[0]; for(inti=1;i =a[i])ans=ans+tmp; returnans%tmp; } 9、同余一元方程组(一般情况): 不停合并两方程 boolg_solve(lla[],llb[],intn,ll&ans,ll&mod){//返回是否有解已经测试FZU1402 ans=a[0]%b[0],mod=b[0];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Siyao 模板