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

容斥原理--题

时间:2016-01-27 12:50:23      阅读:166      评论:0      收藏:0      [点我收藏+]

标签:

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

 

容斥原理--题

标签:

原文地址:http://www.cnblogs.com/16er/p/5162587.html

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