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

hdu1796:容斥入门题

时间:2014-10-22 23:25:14      阅读:358      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   os   for   sp   div   on   

简单的容斥入门题。。

容斥基本的公式早就知道了,但是一直不会写。

下午看到艾神在群里说的“会枚举二进制数就会容斥”,后来发现还真是这样。。

然后直接贴代码了

#include <iostream>
#include <stdio.h>
#include<string.h>
#include<algorithm>
#include<string>
#include<ctype.h>
using namespace std;
long long m,n,a[15];
long long gcd(long long a,long long b)
{
    return b?gcd(b,a%b):a;
}
long long lcm(long long a,long long b)
{
    return a/gcd(a,b)*b;
}
void ini()
{
    for(int i=0;i<n;i++)
    {
        scanf("%I64d",a+i);
        if(a[i]<1)
        {
            n--;i--;       //此题输入中可能有0
        }
    }
}
long long iae()
{
    long long res=0;
    for(int i=1;i<(1<<n);i++)
    {
        long long mut=1,tmp=0;
        for(int j=0;j<n;j++)
        {
            if(i&(1<<j))
            {
                tmp++;
                mut=lcm(mut,a[j]);
            }
        }
        if(tmp&1)
        {
            res+=(m-1)/mut;
        }
        else
        {
            res-=(m-1)/mut;
        }
    }
    return res;
}
void solve()
{
    printf("%I64d\n",iae());
}
int main()
{
    while(scanf("%I64d%I64d",&m,&n)!=EOF)
    {
        ini();
        solve();
    }
    return 0;
}

 

hdu1796:容斥入门题

标签:style   blog   color   io   os   for   sp   div   on   

原文地址:http://www.cnblogs.com/oneshot/p/4044503.html

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