1. 程式人生 > >大水題 (容斥原理)

大水題 (容斥原理)

題目描述

給出一個數n,求1到n中,有多少個數不是2 5 11 13的倍數。

輸入描述:

本題有多組輸入
每行一個數n,1<=n<=10^18.

輸出描述:

每行輸出輸出不是2 5 11 13的倍數的數共有多少

容斥係數:奇正偶負.

#include<bits/stdc++.h>
using namespace std;
int a[4]= {2,5,11,13};
long long que[50];
long long f(long long n)
{
    long long t=0,sum=0;
    que[t++]=-1;
    for(int i=0; i<4; i++)
    {
        long long k=t;
        for(int j=0; j<k; j++)
            que[t++]=que[j]*a[i]*(-1);
    }
    for(int i=1; i<t; i++)
        sum+=n/que[i];
    return sum;
}
int main()
{
    long long n;
    while(scanf("%lld",&n)==1)
    {
        int ans=f(n);
        printf("%lld\n",n-ans);
    }
    return 0;
}