码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces 630K - Indivisibility

时间:2016-02-26 01:50:47      阅读:260      评论:0      收藏:0      [点我收藏+]

标签:

K. Indivisibility

题意:给一个n(1 <= n <= 10^18)的区间,问区间中有多少个数不能被2~10这些数整除;

整除只需要看素数即可,只有2,3,5,7四个素数;基本的容斥原理;数据很小直接用二进制模拟了;

int main()
{
    ll n,a[] = {2,3,5,7};
    scanf("%I64d",&n);
    ll cnt = n;
    for(int id = 1;id < (1<<4);id++){
        int num = 1;
        rep0(i,0,4)if(id &(1<<i)){
            num *= a[i];
        }
        int t = 1;
        if(__builtin_popcount(id) & 1) t = -1;
        cnt += 1LL*t*(n/num);
    }
    cout<<cnt;
    return 0;
}

 

codeforces 630K - Indivisibility

标签:

原文地址:http://www.cnblogs.com/hxer/p/5218883.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!