容斥原理之素数部分模板
2014-11-01 14:25
281 查看
容斥原理主要是应用因子的组合形式(也就是Ai的并)。
在区间范围中就是先求含有两个因子的最小数,也就是最小公倍数。r/lcm(a,b) 也就是(1,r)中含有z这个数的个数。
奇加偶减。
模板为计算(1,r)中 与num互质/非互质的个数。
二进制:
dfs法:
附上几道题:
hdu 4135
给定[l,r],n,求与n互质的数的个数。
poj 2773
给定 m,k
求与m互质的第k个数。
hdu 5072
给n个数。
求三个数(两两互质或两两不互质)的组合数量。
hdu 1796
给定n,m={a1,…,am}.
求1~n中被m集合任意一个数整除的数的个数。
hdu 1695
给定 (1,b),(1,d),求gcd(x,y)=k的对数。x属于(1,b),y属于(1,c)
hdu 2841
给定m*n矩阵,起点为(0,0),与起点形成一条直线的上的树中只能看见第一颗。
hdu 3501
所有n的因子(除1外)的和。也就是非互质的数的和。
在区间范围中就是先求含有两个因子的最小数,也就是最小公倍数。r/lcm(a,b) 也就是(1,r)中含有z这个数的个数。
奇加偶减。
模板为计算(1,r)中 与num互质/非互质的个数。
二进制:
void getfactor(__int64 num) { fac.clear(); for(int i=2;i*i<=num;i++) { if(num%i==0) { fac.push_back(i); while(num%i==0)num/=i; } } if(num>1)fac.push_back(num); } __int64 coprime(__int64 num,__int64 r) { int mm=(1<<fac.size()); __int64 ans=0; for(int i=1;i<mm;i++) { int cnt=0;__int64 temp=1; for(int j=0;j<fac.size();j++) { if(i&(1<<j)) { cnt++; temp*=fac[j];<span style="font-family: Arial, Helvetica, sans-serif;">//这里其实是公倍数,因为二者互质所以为相乘</span> } } if(cnt&1) ans+=r/temp; else ans-=r/temp; } return r-ans; }
dfs法:
int cnt=0; void getfac(int x) { cnt=0; for(int i=2;i*i<=x;i++) { if(x%i==0) { p[cnt++]=i; while(x%i==0)x/=i; } } if(x>1)p[cnt++]=x; } void dfs(int idx,int num,int val,int R) { if(idx==cnt) { if(val==1)return; if(num&1)x+=R/val; else x-=R/val; return; } dfs(idx+1,num+1,val*p[idx],R);//这里其实是公倍数,因为二者互质所以为相乘 dfs(idx+1,num,val,R); }
附上几道题:
hdu 4135
给定[l,r],n,求与n互质的数的个数。
poj 2773
给定 m,k
求与m互质的第k个数。
hdu 5072
给n个数。
求三个数(两两互质或两两不互质)的组合数量。
hdu 1796
给定n,m={a1,…,am}.
求1~n中被m集合任意一个数整除的数的个数。
hdu 1695
给定 (1,b),(1,d),求gcd(x,y)=k的对数。x属于(1,b),y属于(1,c)
hdu 2841
给定m*n矩阵,起点为(0,0),与起点形成一条直线的上的树中只能看见第一颗。
hdu 3501
所有n的因子(除1外)的和。也就是非互质的数的和。
相关文章推荐
- 容斥原理 —— 求1~n有多少个数与k互质(二进制算法详细解释&模板)
- 容斥原理 + 大数模板(跳蚤 POJ - 1091)
- 深入解析php模板技术原理【一】
- C++模板的定制三:部分定制C++类
- 一组角点检测模板和原理说明
- Silverlight教程第七部分: 使用控件模板定制控件的观感
- Ajax基础原理例子PART.I (附部分参考资料)
- 一分钟让你知道什么叫MVC分离及模板引擎原理——权当搞笑
- 一组角点检测模板和原理说明
- Silverlight教程第七部分: 使用控件模板定制控件的观感
- Silverlight教程第七部分: 使用控件模板定制控件的观感
- smarty实例教程(原创) ---模板设计部分
- 通俗易懂客户端与服务器端交互原理(HTTP数据请求与HTTP响应,包括Servlet部分)
- 通俗易懂客户端与服务器端交互原理(HTTP数据请求与HTTP响应,包括Servlet部分)
- [初学者入门]ASP.NET 2.0数据绑定框架原理与示例(部分)
- 数论部分第一节:素数与素性测试
- 使用vector 模板求素数
- 使用可重用资产构建 SOA 应用程序,第 3 部分:WS 响应模板模式
- 如何恢复 Linux 上删除的文件,第 1 部分(原理及普通文件的恢复)
- P2P之UDP穿透NAT的原理与实现(实现部分)