容斥原理--题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了容斥原理--题相关的知识,希望对你有一定的参考价值。

2016.1.27

 

试题描述

给定a1,a2,…,am,求1到n的整数中至少能整除a中一个元素的数有几个?

输入
输入n,m,和含有m个元素的集合,三者用空格分开
输出
输出可以整除a中一个元素的个数。
输入示例
100 2 {2,3}
输出示例
67
其他说明
限制条件:1≤n≤10的9次方。 1≤m≤15

 

题干上四个大字容斥原理,你还有什么道理不用!

状压暴搜都可以的啦~

AC代码:

技术分享
#include<iostream>
using namespace std;
int n,m,a[20],ct,tot,ans;
char ch; 
inline int read()
{
    int x,f=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch==-) f=-1;
    for(x=ch-0;isdigit(ch=getchar());x=x*10+ch-0);
    return x*f;
}
int main()
{
    n=read();m=read();
    for(int i=1;i<=m;i++) a[i]=read();
    for(int i = (1 << m) - 1 ; i >= 1 ; i-- )
    {
        ct=0;tot=1;
        for(int j = m - 1 ; j >= 0 ; j-- )
        {
            if(1<<j & i) ct++,tot*=a[j+1];
        }
        tot=n/tot;
        if(ct+1 & 1) tot=-tot;
        ans+=tot; 
    }
    cout<<ans;
}
View Code

 

以上是关于容斥原理--题的主要内容,如果未能解决你的问题,请参考以下文章

第46题容斥原理 的应用(更新中)

容斥原理解一般不定方程——cf451E经典题

HDU 2461 Rectangles#容斥原理

HDU2841 Visible Trees(容斥原理)

刷题总结——分糖(ssoj 容斥原理+逆元+快速幂+组合数求插板)

2014ACM/ICPC亚洲区西安站 F题 color (组合数学,容斥原理)