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

来源:互联网 发布:epubbuilder for mac 编辑:程序博客网 时间:2024/05/06 16:01
//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;}
阅读全文
0 0
原创粉丝点击