1030 大水题 容斥原理


链接:https://ac.nowcoder.com/acm/contest/26656/1030
来源:牛客网

题目描述

给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。

输入描述:

本题有多组输入
每行一个数n,1<=n<=10^18.

输出描述:

每行输出输出不是2 5 11 13的倍数的数共有多少。

示例1

输入

复制

15

输出

复制

4

说明

1 3 7 9

 分析

容斥原理。总方案数 – 奇数个限制量相乘的方案数 + 偶数个限制量相乘的方案数

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
#define int ll

int a[6],n;

signed main() {
    
    a[0] = 2,a[1] = 5,a[2] = 11,a[3] = 13;
    
    while(cin>>n) {
        int st = 4,ans = 0;
        for(int i = 0;i < (1 << st) ;i ++ ) {
            int tmp = 1,cnt = 0;
            for(int j = 0;j<4;j++) {
                if( (i >> j) & 1 ) {
                    cnt ++ ;
                    tmp *= a[j];
                }
            }
            
            if(cnt & 1) ans -= n / tmp;
            else ans += n / tmp;
        }
        cout<<ans<<endl;
    }
}

 

原创文章,作者:,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/277638.html

(0)
上一篇 2022年7月29日 03:18
下一篇 2022年7月29日 03:18

相关推荐

发表回复

登录后才能评论