每日一题(4)51nod 1284 2 3 5 7的倍数

给出一个数N,求1至N中,有多少个数不是2 3 5 7的倍数。 例如N = 10,只有1不是2 3 5 7的倍数。
Input
输入1个数N(1 <= N <= 10^18)。
OutPut
输出不是2 3 5 7的倍数的数共有多少。
Input示例
10
Output示例

1


思路:运用容斥原理。

容斥原理的描述如下:

要计算几个集合并集的大小,我们要先将单个集合的大小计算出来,然后减去两个集合相交的部分,再加回三个集合相交的部分,再减去四个集合相交的部分,以此类推,一直计算到所有集合相交的部分。


#include <iostream>  
  
using namespace std;  
  
long long n,num,a,b,c,d,ab,ac,ad,bc,bd,cd,abc,abd,bcd,acd,abcd;  
int main()  
{  
    cin>>n;     
    num=0;  
    a=n/2;  
    b=n/3;  
    c=n/5; 
    d=n/7;    
    ab=n/6; 
    ac=n/10;  
    ad=n/14;  
    bc=n/15;  
    bd=n/21;  
    cd=n/35;  
    abc=n/30;  
    abd=n/42;  
    acd=n/70;  
    bcd=n/105;  
    abcd=n/210;  
    num=a+b+c+d-ab-ac-ad-bc-bd-cd+abc+abd+acd+bcd-abcd;   
    cout<<n-num<<endl;  
    return 0;  
}  


猜你喜欢

转载自blog.csdn.net/qq_40911499/article/details/79918838
今日推荐