10.22_数论总结
来源:互联网 发布:vlc mac 编辑:程序博客网 时间:2024/06/09 17:35
这一周复习了数论内容:
组合数:
常用的有lucas定理以及求逆元的操作,思维题比较多,
常常运用于统计方案个数。
有时候直接式子难以直接求,需要化简。
常用的转化方式:
通过添减项(+1=+C(n,n)),利用C(n,m)=C(n-1,m-1)+C(n-1,m)来合并各项。
另外还有一些问题可以通过转化模型最后变为组合数,这种情况可以先想想什么是容易求的,再想想可否转化。
例如求长度为n的单调不降序列个数问题的常用转化
求组合数的常用方法:
关于法四,具体是:
筛出1-n中所有质数,筛出每个数最小的质因子p[i]。
求C(n,m)
开一个cnt[n]的数组。
for(i=n~1) 对于每个i(质数跳过),拆成两个数p[i]和i/p[i],cnt[p[i]]和cnt[i/p[i]]都加上cnt[i],cnt[i]赋为0。
这样之后cnt[p]存的就是质因子p的指数。
因为n以内的质数有 n/logn 个,for每个指数,快速幂是log的,因此最终求C(n,m)的复杂度是O(n)的。
容斥原理
还是有些不熟悉。
常用的DFS
void dfs(int pos,LL num,int dep){ if(pos==(n+1)||num>m) return; LL nnum=1LL*a[pos]*1LL*num/gcd(a[pos],num); int select=(dep%2==0)?-1:1; ans+=select*m/nnum; dfs(pos+1,num,dep); dfs(pos+1,nnum,dep+1);}
dfs(1,1,1);
然后学到了奇妙的:
二进制枚举子集的方法
非常巧妙也非常优。
两个套路:
与起来为k/交集为k :包含k的 - 包含k+1的 + 包含k+2的…
或起来为k/并集为k :k包含的 - k-1包含的 + k-2包含的…
线性筛
除了筛素数外常用于求积性函数.
套路:
直接套式子求出
对于每个数 x 筛出:
other[x]这个数除去其最小质因子p剩下的数(
ind[x]这个数最小质因子的指数。
每次对于一般的数
对于 i%p==0,
以之前facsum的代码为例:
void shai(){ f[1]=1; other[1]=1; ind[1]=1; memset(is,0,sizeof(is)); is[1]=1; for(int i=2;i<=n;i++) { if(!is[i]) { pri[++ptot]=i; f[i]=2-i; other[i]=1; ind[i]=1; } for(int j=1;j<=ptot;j++) { int p=pri[j]; LL x=1LL*p*i; if(x>n) break; is[x]=1; if(i%p==0) { ind[x]=ind[i]+1; other[x]=other[i]; if(other[i]==1) //p^k f[x]=((mod-1LL*p*ind[x])%mod+(ind[x]+1)%mod)%mod; else f[x]=(1LL*f[other[x]]*f[x/other[x]])%mod; break; } ind[x]=1; other[x]=i; f[x]=(1LL*f[i]*f[p])%mod; } }}
逆元
O(n)递推求逆元
CRT
非常有用的工具,常用于模数不是质数,最后拆分分别求答案再合并。
欧拉定理
推论:
常用于简化指数。
关于这周的测验:
组合数一类仍然比较弱,但一般的基本知识是知道的。
下一周仍然分出一天半左右集中复习数论。
- 10.22_数论总结
- 12.1_数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论总结
- 数论_逆元
- 算法导论学习_数论
- 算法_1: 数论_续
- hdu_2608_0 or 1_数论
- Factorials_usaco3.2_数论?暴力!
- 自考总结
- 编程作业50页3题 分别使用 do-while和 for 循环计算1+1/2!+1/3!+1/4!...+1/20!
- ALL Code of color snesor with arduino
- 修改svn的注释
- MyEclipse 自动补全返回值对象
- 10.22_数论总结
- windows上编译zlib-1.2.8
- 查看ELF 文件版本信息
- Python源码剖析(03 Python中的字符串对象)
- 严蔚敏版数据结构课本代码——算法2.1
- jQuery mobile手風琴折疊效果
- #javaGUI#基于swing包的java用户界面设置入门,组件篇
- servlet是干什么的?
- HDU1247 Hat's Words(Trie树,map)