[容斥] LightOJ 1117 - Helping Cicada
来源:互联网 发布:linux zip文件压缩 编辑:程序博客网 时间:2024/05/19 11:50
LightOJ 1117 - Helping Cicada
题意:给个正整数n,然后给m个整数,求1~n有多少个数不能被这m个数中任意一个整除。(1 <= n < 2^31, m <= 15)
思路:裸容斥,考虑1个数k,1~n有[n/k]个数能被k整除,[a]表示a向下取整,所以ans= n-SIGMA([n/num[i]])(1<=i<=m)。再考虑2个数a,b,因为被a整除同时被b整除这部分减了两次,所以要加上,ans += n/lcm(a,b),枚举2个数,又发现3个数的多加了,再减去3个的,再加上4个的,减去5个的,以此类推。
#include<bits/stdc++.h>#define ll long long intusing namespace std;ll num[16];int f[2] = {1, -1};ll gcd(ll a, ll b){ return b? gcd(b, a%b) : a; }ll lcm(ll a, ll b){ if(a < b) swap(a, b); return a/gcd(a,b)*b;}int main(){ int T, ca = 1; scanf("%d", &T); while(T--){ ll n, m; scanf("%lld%lld", &n, &m); for(int i = 0; i < m; ++i) scanf("%lld", num+i); ll ans = n, MXM = (1<<m); for(int i = 1; i < MXM; ++i){ ll tmp = 1, t = 0; for(int j = 0; (1<<j) <= i; ++j){ if(i&(1<<j)){ t += 1; tmp = lcm(tmp, num[j]); } } ans += f[t&1]*n/tmp; } printf("Case %d: %lld\n", ca++, ans); }}
0 0
- [容斥] LightOJ 1117 - Helping Cicada
- LightOJ-1117 Helping Cicada(容斥定理)
- lightoj 1117 - Helping Cicada(容斥)
- Light OJ 1117 Helping Cicada(容斥)
- LightOJ 1144 容斥
- Lightoj 1095 容斥原理
- [容斥+lucas] LightOJ 1124 - Cricket Ranking
- LightOJ 1095 Arrange the Numbers (容斥原理)
- 【LightOJ】1414 - February 29(容斥原理)
- lightoj-1414-February 29【容斥原理&&细节】
- Lightoj 1414 - February 29 (闰年统计,容斥定理)
- codeforces - E. Devu and Flowers & LightOJ 1124 Cricket Ranking(容斥定理+lucas定理)
- Li Ning cicada shoes
- Cicada 3301
- 容斥
- 容斥
- 容斥
- 容斥
- 【杭电oj】2050 - 折线分割平面(递推)
- 设计模式-结构模式
- 125. Valid Palindrome
- github客户端怎样上传代码 mac
- JavaWeb开发之十二:JSP九大内置对象
- [容斥] LightOJ 1117 - Helping Cicada
- 杭电2008
- Java中的异常
- android蓝牙开发 蓝牙设备的查找和连接
- 【leetcode】 39. Combination Sum
- git 学习笔记
- nyoj--71 独木舟上的旅行(贪心)
- Stanford 机器学习笔记 Week8 Unsupervised Learning
- Jenkins入门系列之——02第二章 Jenkins安装与配置