给出一个数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> #include <cstdio> #include <cstring> #include <algorithm> #define MAX 101 using namespace std; long long n; long long s[4] = {2,3,5,7}; int main() { scanf("%lld",&n); long long num = n; for(int i = 0;i < 4;i ++) { num -= n / s[i]; for(int j = 0;j < i;j ++) { num += n / (s[i] * s[j]); for(int k = 0;k < j;k ++) { num -= n / (s[i] * s[j] * s[k]); for(int l = 0;l < k;l ++) { num += n / (s[i] * s[j] * s[k] * s[l]); } } } } printf("%lld",num); }