题目描述

给出m个数a[1],a[2],…,a[m]

求1~n中有多少数不是a[1],a[2],…,a[m]的倍数。

输入输出格式

输入格式:

输入文件名为count.in。

第一行,包含两个整数:n,m

第二行,包含m个数,表示a[1],a[2],…,a[m]

输出格式:

输出一行,包含1个整数,表示答案

输入输出样例

输入样例#1:

10 2
2 3
输出样例#1:

3

说明

对于60%的数据,1<=n<=10^6

对于另外20%的数据,m=2

对于100%的数据,1<=n<=10^9,0<=m<=20,1<=a[i]<=10^9

 /*
容斥原理
ans=n/单个数-n/两个数lcm+n/三个数lcm-....+(-1)^(i+1)*n/n个数的lcm
复杂度 2^m*log 用dfs求各个数的lcm。看了老司机昨天打的T2,我竟然想手模20个数的lcm /捂脸/
千万千万要开long long,不知道哪儿需要开的话就全开long long,反正不差那点空间
*/ #include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std; long long n,m,ans;
long long a[]; int gcd(long long a,long long b)
{
return b?gcd(b,a%b):a;
} void dfs(long long now,int deep,int flag)
{
if(now>n) return;
if(deep==m+)
{
ans+=n/now*flag;
return;
}
dfs(now,deep+,flag);
dfs(now/gcd(now,a[deep])*a[deep],deep+,-flag);
} inline void init()
{
scanf("%lld%lld",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%lld",&a[i]);
}
dfs(,,);
printf("%lld",ans);
} int main()
{
init();
return ;
}

最新文章

  1. OC泛型
  2. Android之ListView的getItemViewType和getViewTypeCount
  3. 切换jdk版本
  4. EventBus--介绍
  5. python字符串的编码格式
  6. CSS3 中的 rem 值与 px 之间的换算
  7. Java集合框架源码剖析:LinkedHashSet 和 LinkedHashMap
  8. [easyui] datebox源码阅读. 批注
  9. Android开发手记(28) Handler和Looper
  10. 开个CS5.4编译编译,调试错误贴
  11. HorizontalScrollView做页卡的一个小记录
  12. 超炫的时间轴jquery插件Timeline Portfolio
  13. input输入自动大写
  14. python中str常用操作
  15. Ubuntu启动eclipse问题
  16. clipboard.js一个可以在移动端一键复制的插件
  17. Couchbase 集群小实践
  18. 骆驼拼写法(CamelCase)
  19. CoreOS 添加用户并赋予sudo权限
  20. Effective Java部分读书笔记

热门文章

  1. SQL Server 索引优化——无用索引
  2. Linux用户组笔记整理
  3. NIO开发Http服务器(2):项目结构
  4. JS解析xml字符串,并把xml展示在HTML页面上
  5. HTTP协议复习二--代理
  6. SQL SERVER-SSMS安装联机丛书 book online
  7. c# Group类
  8. c# MatchCollection类
  9. Linux磁盘管理——directory tree与mount point
  10. 公用表表达式(CTE) with as