本文主要是介绍[C++][算法基础]能被整除的数(容斥原理),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
给定一个整数 𝑛 和 𝑚 个不同的质数 𝑝1,𝑝2,…,𝑝𝑚。
请你求出 1∼𝑛 中能被 𝑝1,𝑝2,…,𝑝𝑚 中的至少一个数整除的整数有多少个。
输入格式
第一行包含整数 𝑛 和 𝑚。
第二行包含 𝑚 个质数。
输出格式
输出一个整数,表示满足条件的整数的个数。
数据范围
1≤𝑚≤16,
1≤𝑛,𝑝𝑖≤
输入样例:
10 2
2 3
输出样例:
7
代码:
#include<iostream>
using namespace std;const int N = 20;
int p[N];
int n,m;int main(){cin>>n>>m;for(int i = 0;i < m;i++){cin>>p[i];}int res = 0;for(int i = 1;i < 1 << m;i ++){int t = 1;int cnt = 0;for(int j = 0;j < m;j ++){if(((i >> j) & 1) == 1){cnt ++;if((long long) p[j] * t > n){t = -1;break;}t *= p[j];}}if(t != -1){if(cnt % 2 == 0){res -= n / t;}else{res += n / t;}}}cout<<res<<endl;return 0;
}
这篇关于[C++][算法基础]能被整除的数(容斥原理)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!