2021-07-29---数论模板
Instructions
来自蒟蒻的数论模板
质数
无穷理论的证明:
设质数有有限的n个,依次为p₁,p₂,p₃,…,pn,则令N=p₁p₂p₃…pn。
1.若N+1为质数,则N+1一定是一个新的质数
2.若N+1为合数,则N一定存在一个不等于p₁,p₂,p₃,…,pn的质数因子。
质数判定的方法:
1.枚举,范围[2,sqrt(n)]。
2.筛选法(打表预处理)
1)、Eratosthenes筛法:用质数i筛掉i的倍数。
:2i,3i,4i…都是合数,一般从ii开始筛,因为2i已经筛过了,3i被3筛过了。
①效率接近线性
②存在重复筛选的问题(eg:15被3、5都筛了一次)
2)、欧拉线性筛:每个合数只用被最小的质因子筛掉。
①num[i]记录i的最小质因子,如果num[i]==i,则i就是质数。
②接下来从小到大枚举已确定的质数primes[j],则iprimes[j]的最小质因子一定是primes[j],除非primes[j]>num[i]。
O(n)的时间复杂度。
欧拉筛模板:
inline void OULA(){for(int i=2;i<=maxn;i++){if(!num[i])primes[++cnt]=i;for(int j=1;i*primes[j]<=maxn;j++){num[i*primes[j]]=true;if(i%primes[j]==0)break;}}
}
约数
N=p1^c1*p2^c2*…*pm^cm。
①N的正约数{p1^b1*p2^b2*…*pm^bm|0<=bi<=ci}。
②N的正约数个数为(c1+1)(c2+1)…(cm+1)=∏i=1~m(ci+1)。
③N的所有正约数和为(1+p1+p1²+…+p1^c1)*…*(1+pm+pm²+…+pm^cm)。
求N的正约数集合:
枚举,1-sqrt(n),完全平方数需要特判。(约数有对称性定理)
对于正整数N,约数上限为2sqrt(n)个。
求1-N中所有数字的正约数:枚举时间复杂度O(Nsqrt(N))。
可以像Eratosthenes筛质数一样,i一定是i的倍数的约数,时间复杂度近似O(nlogn)。
欧拉筛+欧拉函数phi模板:
inline void OULA(){for(int i=2;i<=maxn;i++){if(!num[i]){primes[++cnt]=i;phi[i]=i-1;}for(int j=1;i*primes[j]<=maxn;j++){num[i*primes[j]]=true;phi[i*primes[j]]=phi[i]*(primes[j]-1);if(i%primes[j]==0){phi[i*primes[j]]=phi[i]*primes[j];break;}}} }
直接求phi模板:
inline int phii(int x){ans3=n;for(int i=2;i<=sqrt(n+1);i++){if(x%i==0){ans3=ans3*(i-1)/i;while(x%i==0){x/=i;}}}if(x>1){ans3=ans3*(x-1)/x;}
}
试除法求约数模板:
inline void Factor(int x){for(int i=1;i<=sqrt(x+1);i++){if(x%i==0){ans[++cntt]=i;if(i!=x/i)ans[++cntt]=x/i;}}sort(ans+1,ans+cntt+1);for(int i=1;i<=cntt;i++){printf(" %lld",ans[i]);ans2+=ans[i];}printf("\n");
}
整数唯一分解:
a=p1e1*p2e2p3e3*…*pnen(p1<p2<…<pn);
b=p1f1*p2f2p3f3*…*pnfn。
则gcd(a,b)=p1min(e1,f1)*p2min(e2,f2)…pn^min(en,fn);
lcm(a,b)=p1max(e1,f1)*p2max(e2,f2)…pn^max(en,fn)。
其因数个数为(e1+1)(e2+1)…(en+1)。
inline void workk(int x){vector<int>a;vector<int>b;int k=0;for(int i=2;i<=sqrt(x+1);i++){if(x%i==0){k=0;a.push_back(i);while(x%i==0){x/=i;k++;}b.push_back(k);}}if(x>1){a.push_back(x);b.push_back(1);}printf("%d=",n);for(int i=0;i<a.size();i++){printf("%d^%d",a[i],b[i]);if(i+1!=a.size())printf("*");}printf("\n");
}
矩阵
矩阵快速幂模板:
inline void Mull(){memset(ans,0,sizeof(ans));for(int i=1;i<=k;i++){for(int j=1;j<=k;j++){long long val=0;for(int q=1;q<=k;q++){val+=(ret[i][q]%m*a[q][j]%m)%m;}ans[i][j]=val%m;}}for(int i=1;i<=k;i++){for(int j=1;j<=k;j++){ret[i][j]=ans[i][j];}}
}
inline void Mull_Self(){memset(ans,0,sizeof(ans));for(int i=1;i<=k;i++){for(int j=1;j<=k;j++){long long val=0;for(int q=1;q<=k;q++){val+=(a[i][q]%m*a[q][j]%m)%m;}ans[i][j]=val%m;}}for(int i=1;i<=k;i++){for(int j=1;j<=k;j++){a[i][j]=ans[i][j];}}
}
inline void Quick_Pow(long long x){memset(ret,0,sizeof(ret));for(int i=1;i<=k;i++){ret[i][i]=1;}while(x){if(x&1)Mull();Mull_Self();x>>=1;}
}
快速幂优化递推例题链接:递推的矩阵优化
莫比乌斯反演
对于f(x),可以很方便得到∑d|nf(d),即:F(n)=∑d|nf(d)。
两个重要的反演公式:
1.F(n)=sigma n|k(f(k)) -->f(n)=sigma n|k(Mo[k/n]F(k))
2.F(n)=sigma k|n(f(k)) -->f(n)=sigma k|n(Mo[k]F(n/k))
莫比乌斯(Möbius)函数:
①μ(d)=1,d=1;
②μ(d)=(-1)ⁿ,d=p₁p₂p₃…pn;
③μ(d)=0,d=others。(存在pn²质因子)
莫比乌斯函数预处理模板:
inline void Mobius(){Mo[1]=1;for(int i=2;i<=maxn-1;i++){if(!num[i]){primes[++cnt]=i;Mo[i]=-1;}for(int j=1;j<=cnt&&i*primes[j]<maxn;j++){num[i*primes[j]]=true;Mo[i*primes[j]]=Mo[i]*(-1);if(i%primes[j]==0){Mo[i*primes[j]]=0;break;}}}
}
例题:HAOI2011
卡特兰数
2021-07-29---数论模板相关推荐
- 新手如何理解一个Web应用的构建(2021.07.29更新)
Web应用构建 ==前言== 我为什么写这篇文章? 适合什么样的人看? ==摘要== 步骤汇总 (1)网站定位与功能设定 (2)信息架构 (3)UI设计 (4)应用架构 (5)开发 (6)部署 (7) ...
- A. [2021.1.29多校省选模拟11]最大公约数(杜教筛/数论)
A. [2021.1.29多校省选模拟11]最大公约数 这是一个杜教筛的经典题目,最后我们只需要筛一下1∗xμ(x)1*x\mu(x)1∗xμ(x)这个函数的前缀和即可,然后看到有111这个函数,我们 ...
- 史上最详细微信小程序授权登录与后端SprIngBoot交互操作说明,附源代码,有疑惑大家可以直接留言,蟹蟹 2021.11.29完善更新小程序代码,
2021.11.29 更新文章 你好,我是博主宁在春,一起学习吧!!! 写这篇文章的原因,主要是因为最近在写毕业设计,用到了小程序,这中间曲曲折折,一言难尽啊.毕业设计真的让人麻脑阔
- 哔哩哔哩“2021.07.13 我们是这样崩的”报告的学习-1
哔哩哔哩"2021.07.13 我们是这样崩的"报告的学习-1 这份报告是我学计算机两年来第一次真实看到大厂的员工到底在干什么.出现了很多专有名词,以及当前最先进的互联网企业的应用 ...
- 2021.07.22禾赛提前批一面面经
2021.07.22禾赛提前批一面面经 1.LUTRAM的意思 2.LUTRAM和block RAM的区别 3.时序约束和时序优化 4.跨时钟域 5.为什么不能多bit采用同步寄存器打两拍(就这个问题 ...
- 2021.07.07 宇信科技
2021.07.07 宇信科技 宇信科技 晚上电话面 问了一堆java基础,离谱,jd上也没要求java:简历筛选扣工资! java小白,凭借c语言基础简单回答了一哈,面试官估计在电 ...
- Doris Weekly FAQ】2021.07.19~2021.08.01
观众朋友们: 晚上好! 欢迎收看[ Doris 近日要闻]~本次为您带来的是 2021年07月19日 - 2021年08月01日 的双周总结. Doris 社区周报每期会包含 FAQ 环节.我们会在社 ...
- 【Doris Weekly FAQ】2021.07.05~2021.07.18
观众朋友们: 晚上好! 欢迎收看[ Doris 近日要闻]~本次为您带来的是 2021年07月15日 - 2021年07月18日 的双周总结. Doris 社区周报每期会包含 FAQ 环节.我们会在社 ...
- Ubuntu下载安装EDB1.3.0 2021.07
Ubuntu16.04x64下载安装EDB1.3.0 2021.07 1.更新gcc和g++ > 7 $ sudo add-apt-repository ppa:ubuntu-toolchain ...
- 2021.04.29删点成林
2021.04.29删点成林 (题目来源:https://leetcode-cn.com/problems/delete-nodes-and-return-forest/) 题目描述 给出二叉树的根节 ...
最新文章
- 2022-2028年中国涤纶市场投资分析及前景预测报告
- 解决Mask RCNN训练时GPU内存溢出问题
- 【java】java反射机制,动态获取对象的属性和对应的参数值,并属性按照字典序排序,Field.setAccessible()方法的说明【可用于微信支付 签名生成】...
- Java 反射机制分析指南
- mysqlsla的使用
- Java 技术篇-IntelliJ IDEA修改java、jdk版本实例演示
- npm install 报错 汇总_2020年特岗教师招聘征集志愿人员资格复审、面试公告汇总...
- python 三引号_Python 简明教程 --- 4,Python 变量与基本数据类型
- TortoiseGit 将工作区变动文件提交本地仓库_入门试炼_04
- java.close用法_void close()
- Cisco *** 完全配置指南-连载-PPTP和L2TP
- 无序数组求第K大/第K小的数
- Android省电妙招
- Mac合并pdf文件最简单的方法——PDF Expert合并pdf文件教程
- 从零开始学Vue(一)—— Vue.js 入门
- Dell’Oro 5年期数据中心报告预测25G/100G端口速率市场快速上升
- 提升效率!技术宅、学生党必备!大学四年使用的几十个高效工具都在这里了
- plc中PROFIBUS通信处理器介绍
- 射频电路PCB的设计技巧
- DC-DC电路中自举电容和自举电阻是什么?
热门文章
- UWA报告使用小技巧,你get了吗?(第五弹)
- 知识大爆炸时代的解决方案
- 关于postgresql中with 临时表的使用,筛选出来当天温度比昨天温度高的数据
- 神经生物学超级大牛蒲慕明教授与研究生谈学习和成长
- Excel中数据汇总常用的几种方法,sumif、合并计算、数据透视表
- k8s 1.22发布:迈向新的巅峰
- linux dns无法解析,Linux服务器内部无法解析域名
- Transformer课程 第29章Transformer模型CTRL架构
- 中国制造首次进入国际顶尖赛场:“中信红”点亮F1赛道
- 万年历mysql数据库万年历宜忌数据_总说黄道吉日,万年历里的宜忌你真的看懂了吗?...