链接:https://www.nowcoder.com/acm/contest/75/G
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。
输入描述:
本题有多组输入
每行一个数n,1<=n<=10^18.
输出描述:
每行输出输出不是2 5 11 13的倍数的数共有多少。
示例1
输入
15
输出
4
说明
来源:牛客网
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。
输入描述:
本题有多组输入
每行一个数n,1<=n<=10^18.
输出描述:
每行输出输出不是2 5 11 13的倍数的数共有多少。
示例1
输入
15
输出
4
说明
1 3 7 9
题意:求不是2、5、11、13倍数的数的个数
思路:显然,这四个数互质,也就是说他们的倍数是不相交的。运用容斥原理:奇数个集合相交的部分加上,偶数个集合相交的部分减去。
代码:
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define IO ios::sync_with_stdio(false);cin.tie(0);
#define INF 0x3f3f3f3f
typedef long long ll;
using namespace std;
int main()
{
ll n;
while(cin >> n){
ll a=n/2,b=n/5,c=n/11,d=n/13;
ll ab=n/10,ac=n/22,ad=n/26,bc=n/55,bd=n/65,cd=n/143;
ll abc=n/110,abd=n/130,acd=n/286,bcd=n/715;
ll abcd=n/1430;
ll ans = a+b+c+d-ab-ac-ad-bc-bd-cd+abc+abd+acd+bcd-abcd;
cout << n-ans << endl;
}
return 0;
}