2018年全国多校算法寒假训练营练习比赛(第三场)G
题目链接
题目描述
给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。
输入描述:
本题有多组输入每行一个数n,1<=n<=10^18.
输出描述:
每行输出输出不是2 5 11 13的倍数的数共有多少。
示例1
输入
15
输出
4
解题思路
容斥原理
AC代码
#include<iostream>
using namespace std;
#define ll long long
ll fun(ll n,ll a) {
return n / a;
}
int main() {
ll n;
while (cin >> n) {
ll ans = 0;
ans -= fun(n, 1430);
ans -= fun(n, 10) + fun(n, 22) + fun(n, 26) + fun(n, 55) + fun(n, 65) + fun(n, 143);
ans += fun(n, 715) + fun(n, 286) + fun(n, 130) + fun(n, 110);
ans += fun(n, 2) + fun(n, 5) + fun(n, 11) + fun(n, 13);
ans = n - ans;
cout << ans << endl;
}
return 0;
}