容斥原理

参考点击打开链接

对容斥原理的描述

容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。

 容斥原理可以描述如下:

         要计算几个集合并集的大小,我们要先将所有单个集合的大小计算出来,然后减去所有两个集合相交的部分,再加回所有三个集合相交的部分,再减去所有四个集合相交的部分,依此类推,一直计算到所有集合相交的部分。

关于集合的原理公式

      上述描述的公式形式可以表示如下:

   

        

 

      它可以写得更简洁一些,我们将B作为所有Ai的集合,那么容斥原理就变成了:

        

         这个公式是由 De Moivre (Abraham de Moivre)提出的。

关于维恩图的原理

       用维恩图来表示集合ABC

       

         那么的面积就是集合ABC各自面积之和减去  的面积,再加上的面积。


         由此,我们也可以解决n个集合求并的问题。

关于概率论的原理

       设事件 代表发生某些事件的概率(即发生其中至少一个事件的概率),则:

  

         这个公式也可以用B代表Ai的集合:

题目:

题目描述 

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

输入描述:

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

输出描述:

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

输入

15

输出

4

说明

1 3 7 9
代码:
#include<map>
#include<vector>
#include<queue>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#define maxn 100010
using namespace std;
typedef long long ll;
#define PI acos(-1.0)
int main()
{
    ll n;
    ios::sync_with_stdio(false);
    while(scanf("%lld",&n)!=EOF)
    {
        ll cnt;
        cnt=n-(n/2)-(n/5)-(n/11)-(n/13);
        cnt=cnt+(n/10)+(n/22)+(n/26)+(n/55)+(n/65)+(n/143);
        cnt=cnt-(n/110)-(n/130)-(n/715)-(n/286);
        cnt=cnt+(n/1430);
        cout<<cnt<<endl;
    }
    return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值