您的位置:首页 > 其它

【容斥原理】求1~n有多少个数与k互质

2017-08-03 00:38 155 查看
//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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: