//n除以奇数个数相乘的时候是加,n除以偶数个数相乘的时候是减。
#include<cstdio>
int num[6] = {2,3,5,7};
int n;
int solve()
{
int ans = 0; //是那四个数的倍数的数的数量
for (int i = 1 ; i < (1<<4) ; i++) //选数
{
int ant = 0; //选中数的数量
int k = 1; //记录选中数字的乘积
for (int j = 0 ; j < 4 ; j++)
{
if (i & (1<<j)) //检测第j个数有没有被选中
{
ant++;
k *= num[j];
}
}
if (ant & 1) //ant % 2 == 1 表示奇数
ans += n / k;
else
ans -= n / k;
}
return ans;
}
int main()
{
scanf ("%d",&n);
printf ("%d\n",n-solve());
return 0;
}
【容斥原理】求1~n有多少个数与k互质
最新推荐文章于 2022-03-09 19:32:45 发布
本文介绍了一个使用C++实现的筛选算法,该算法通过计算特定数值范围内能被指定质数整除的数的数量来找出符合条件的数。文章详细解释了算法的工作原理,包括如何通过位操作选择不同的质数进行组合,并基于奇偶性来决定加法或减法运算。

5056

被折叠的 条评论
为什么被折叠?



