https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1284
SB写法,多个数要计算lcm容斥。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 26;
int gcd(int a, int b){return b == 0 ? a : gcd(b, a % b);}
int lcm(int a, int b){return a / gcd(a, b) * b;}
int main()
{
ios::sync_with_stdio(0); cin.tie(0);
ll n;
cin >> n;
//互质的话是不需要lcm的
cout << n - (n / 2 + n / 3 + n / 5 + n / 7
- (n / lcm(2, 3) + n / lcm(2, 5) + n / lcm(2, 7)
+ n / lcm(3, 5) + n / lcm(3, 7) + n / lcm(5, 7))
+ n / lcm(2, lcm(3, 5)) + n / lcm(2, lcm(3, 7))
+ n / lcm(2, lcm(5, 7)) + n / lcm(3, lcm(5, 7))
- n / lcm(lcm(2, 3), lcm(5, 7)))
<< endl;
return 0;
}