51nod1284 容斥原理

来源:互联网 发布:mac 照片很大 找不到 编辑:程序博客网 时间:2024/06/07 23:16

题意:

给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数。 例如N = 10,只有1不是2 3 5 7的倍数。
Input
输入1个数N(1 <= N <= 10^18)。
Output
输出不是2 3 5 7的倍数的数共有多少。
Input示例
10
Output示例
1

思路:

*容斥原理的计数,有n个条件,n1||n2||n3||...||nn,即求n个条件的并集:*sum=满足一个条件的数目-满足两个条件的数目+...+满足奇数个条件的数目-满足偶数个条件的数目
#include<bits/stdc++.h>using namespace std;#define ll long longint main(){    ll n;    scanf("%I64d", &n);    ll a = n/2;    ll b = n/3;    ll c = n/5;    ll d = n/7;    ll ab = n/6;    ll ac = n/10;    ll ad = n/14;    ll bc = n/15;    ll cd = n/35;    ll bd = n/21;    ll abc = n/30;    ll abd = n/42;    ll acd = n/70;    ll bcd = n/105;    ll abcd = n/210;    printf("%I64d\n", n-a-b-c-d+ab+ac+ad+bc+bd+cd-abc-abd-acd-bcd+abcd);    return 0;}




原创粉丝点击