题解

1 条题解

  • 0
    @ 2017-10-07 14:06:53

    容斥原理。自己水吧。
    #include<bits/stdc++.h>
    inline const void read(long long &a)
    {
    a=0;
    char c=getchar();
    while(c<'0'||c>'9')c=getchar();
    while(c>='0'&&c<='9')
    {
    a=(a<<1)+(a<<3)+c-'0';
    c=getchar();
    }
    }
    inline const void write(long long a)
    {
    if(a>9)write(a/10);
    putchar(a%10+'0');
    }
    inline const long long gcd(long long a,long long b)
    {
    if(a<b)return gcd(b,a);
    if(!b)return a;
    return gcd(b,a%b);
    }
    inline const long long lcm(long long a,long long b)
    {
    return a/gcd(a,b)*b;
    }
    long long n,m,a[21],ans=0;
    int main()
    {
    read(n);read(m);
    for(long long i=1;i<=m;i++)read(a[i]);
    long long p,d;
    for(long long i=1;i<=(1<<m)-1;i++)
    {
    p=1;d=-1;
    for(long long j=1;j<=m;j++)
    {
    if(i&(1<<(j-1)))
    {
    d*=-1;
    p=lcm(p,a[j]);
    if(p>n){p=0;break;}
    }
    }
    if(p)ans+=d*n/p;
    }
    write(n-ans);
    return 0;
    }

  • 1

信息

难度
9
分类
(无)
标签
(无)
递交数
9
已通过
1
通过率
11%
上传者