HDU.1796 How many integers can you find ( 组合数学 容斥原理 二进制枚举)

题意分析

求在[1,n-1]中,m个整数的倍数共有多少个

UVA.10325 The Lottery 一模一样。

前置技能和其一样,但是需要注意的有一下几点:

1. m个数字中可能有0

2. 要用long long

代码总览

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define nmax 20
#define ll __int64
using namespace std;
ll initnum[nmax];
ll n;
int m;
ll gcd(ll a, ll b)
{
if(!b) return a;
else return gcd(b, a%b);
}
ll lcm(ll a, ll b)
{
return a/abs(gcd(a,b))*b;
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%I64d %d",&n,&m) != EOF){
int num = 0;
ll temp = 0;
for(int i = 0 ;i<m;++i){
scanf("%I64d",&temp);
if(temp !=0) initnum[num++] = temp;
}
ll time = (1<<num);
ll ans = 0;
n--;
for(int i = 1; i<time;++i){
int index = 0;
ll tmpans = 1LL;
for(int j = 0; j<num;++j){
if( 1 & (i>>j)){
tmpans = lcm(tmpans,initnum[j]);
index++;
}
}
if(index & 1){//add
ans += n / tmpans;
}else{//even
ans -= n / tmpans;
}
}
//ans = n-ans;
printf("%I64d\n",ans);
}
return 0;
}

最新文章

  1. Installing Intellij IDEA sublime-text-2 on Ubuntu
  2. JavaScript之毒瘤
  3. canvas缓动2
  4. 【USACO 1.5】Prime Palindromes
  5. 用sessionStorage实现页面之间的数据传输
  6. 字母排列_next_permutation_字典序函数_待解决
  7. Kafka-0.10.0.0入门
  8. 读书笔记之 - javascript 设计模式 - 工厂模式
  9. php+支付宝整合
  10. Linux文件操作学习总结【转载】
  11. java 实例化是调用了子类重写方法
  12. Android静态变量使用陷阱
  13. 运营商级NAT(Carrier-grade NAT)
  14. CSS3 之 童年的纸飞机
  15. Go语言基础之反射
  16. static_cast 使用
  17. 性能优化7--App瘦身
  18. mac 命令操作
  19. LeetCode(59):螺旋矩阵 II
  20. Nutch源码阅读进程4

热门文章

  1. 从零系列--开发npm包(二)
  2. Linux 系统安全检查(shell)
  3. NIO基本概念
  4. Git基础级介绍
  5. Daily Scrum (2015/10/25)
  6. Chapter 8 面向对象设计
  7. “吃神么,买神么”的第三个Sprint冲刺总结
  8. 四则运算之GUI
  9. C#编程之神奇程序找数
  10. Redis有序集内部实现原理分析