集训Day1 T3 整除
2017-10-19 19:57
267 查看
Description
给出n个数a1,a2……an,求区间[L,R]中有多少个整数不能被其中任何一个数整除。
Input
第一行三个正整数,n,L,R。
第二行n个正整数a1,a2……an
Output
一个数,即区间[L,R]中有多少个整数不能被其中任何一个数整除。
Sample Input
2 1 1000
10 15
Sample Output
867
Data Constraint
对于30%的数据,1<=n<=10,1<=L,R<=1000
对于100%的数据,1<=n<=18,1<=L,R<=10^9
思路:容斥 ,由于n比较小,可以直接暴力dfs,看看每次选了几个数,奇数加偶数减统计答案
代码如下:
给出n个数a1,a2……an,求区间[L,R]中有多少个整数不能被其中任何一个数整除。
Input
第一行三个正整数,n,L,R。
第二行n个正整数a1,a2……an
Output
一个数,即区间[L,R]中有多少个整数不能被其中任何一个数整除。
Sample Input
2 1 1000
10 15
Sample Output
867
Data Constraint
对于30%的数据,1<=n<=10,1<=L,R<=1000
对于100%的数据,1<=n<=18,1<=L,R<=10^9
思路:容斥 ,由于n比较小,可以直接暴力dfs,看看每次选了几个数,奇数加偶数减统计答案
代码如下:
#include <cstdio> #include <cstring> #include <iostream> using namespace std; long long l,r,ans,a[21]; int n; long long gcd(long long a,long long b) { if (b==0) return a; gcd(b,a % b); } long long lcm(long long a,long long b) { return (a*b)/gcd(a,b); } void dfs(int dep,int s,long long zs) { if (dep>n) { if (s%2==1) ans+=r/zs-(l-1)/zs; else ans-=r/zs-(l-1)/zs; return; } dfs(dep+1,s+1,lcm(a[dep],zs)); dfs(dep+1,s,zs); } int main() { //freopen("number.in","r",stdin); //freopen("number.out","w",stdout); scanf("%d%lld%lld",&n,&l,&r); for (int i=1;i<=n;i++) scanf("%lld",&a[i]); dfs(1,1,1); printf("%lld",ans); }
相关文章推荐
- 2014.08.12集训总结 NOI(P) 模拟赛Day1
- Noip 提高组 2016 Day1 T3 换教室 Floyd+期望dp
- 20150127 学军集训 day1
- NOIP2017 Day1 T3 逛公园(最短路+拓扑排序+DP)
- [后缀自动机][阈值] LOJ #6031. 「雅礼集训 2017 Day1」字符串
- 2018福州集训DAY1
- NOIP2013 Day1 T3 货车运输
- 股神小L 2016Vijos省选集训 day1
- 【2018暑假集训模拟一】Day1题解
- 沈阳集训day1
- 「长乐集训 2017 Day1」区间 线段树
- 洛谷noip 模拟赛 day1 T3
- Noip2012 Day1 T3 开车旅行无题解的70分代码(未完成)
- Noip 2013 Day1 T3 货车运输 启发式并查集树
- #6029. 【雅礼集训 2017 Day1】市场
- 考前集训(day1上)
- [后缀自动机 阈值] LOJ#6031. 「雅礼集训 2017 Day1」字符串
- GDKOI2016 Day1 T3 寻宝
- 【BZOJ 4515】【SDOI 2016 Round1 Day1 T3】游戏
- FJ省队集训DAY1 T1