能被整除的数

能被整除的数

给定一个整数 nm 个不同的质数 p1,p2,,pm

请你求出 1n 中能被 p1,p2,,pm 中的至少一个数整除的整数有多少个。

输入格式

第一行包含整数 nm

第二行包含 m 个质数。

输出格式

输出一个整数,表示满足条件的整数的个数。

数据范围

1m16,

1n,pi109

输入样例:

10 2
2 3

输出样例:

7

 

解题思路

  容斥原理。

  定义Spi表示1n中能被pi整除的数的集合。因此答案就是|1imSpi|=1im|Spi|1i<jm|SpiSpj|+1i<j<km|SpiSpjSpk|+(1)m1|1imSpi|

  其中 |1ikSpi| 表示n中能被i=1kpi整除的数的个数,即|1ikSpi|=ni=1kpi

  通过二进制枚举来实现容斥原理的计算过程,时间复杂度为O(m2m)

  AC代码如下:

复制代码
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N = 20;
 5 
 6 int p[N];
 7 
 8 int main() {
 9     int n, m;
10     scanf("%d %d", &n, &m);
11     for (int i = 0; i < m; i++) {
12         scanf("%d", p + i);
13     }
14     int ret = 0;
15     for (int i = 1; i < 1 << m; i++) {
16         int cnt = 0, s = n;
17         for (int j = 0; j < m; j++) {
18             if (i >> j & 1) {
19                 cnt++;
20                 s /= p[j];
21             }
22         }
23         if (~cnt & 1) s *= -1;
24         ret += s;
25     }
26     printf("%d", ret);
27     
28     return 0;
29 }
复制代码

 

参考资料

  AcWing 890. 能被整除的数:https://www.acwing.com/video/311/

posted @   onlyblues  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
Web Analytics
点击右上角即可分享
微信分享提示