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

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <stdio.h>
 4 #include <cstring>
 5 using namespace std;
 6 #define ll long long
 7 int main()
 8 {
 9     ll n;
10     while(cin>>n){
11         ll s2,s3,s5,s7,s23,s25,s27,s35,s37,s57,s235,s237,s257,s357,s2357,s=0;
12         s2=n/2,s3=n/3,s5=n/5,s7=n/7;
13         s23=n/(2*3),s25=n/(2*5),s27=n/(2*7),s35=n/(3*5),s37=n/(3*7),s57=n/(5*7);
14         s235=n/(2*3*5),s235=n/(2*3*5),s237=n/(2*3*7),s257=n/(2*5*7),s357=n/(3*5*7);
15         s2357=n/(2*3*5*7);
16         s+=s2+s3+s5+s7-s23-s25-s27-s35-s37-s57+s235+s237+s257+s357-s2357;
17         cout<<n-s<<endl;
18     }
19     return 0;
20 }

 

posted @ 2017-07-26 10:59  wydxry  阅读(336)  评论(0编辑  收藏  举报
Live2D