题目链接:2 3 5 7 的倍数
对于这个题目我们可以先找出来 2 3 5 7 的倍数 然后做差即可
将 n 依次除以 2 3 5 7 就可以得到2 3 5 7 的倍数,但是中间可能有重复的(比如 6 ,在计算 2 的倍数时数了一次,在计算 3 的倍数时又数了一次)
进行去重:
1)用 2 3 5 的倍数的个数 - 2 3 5 7 倍数的个数
这样在计算 2 3 5 的倍数时就不会计算 2 3 5 7 的倍数了
。
。
。
n) 用 2 3 的倍数的个数 - 2 3 5 倍数的个数 - 2 3 7 倍数的个数 - 2 3 5 7 倍数的个数
。
。
。
待全部处理完成之后在单独处理
2 3 5 7 的倍数计算时 数了 4 次
2 3 5 的倍数计算时 数了3 次
2 3 的倍数计算时 数了 2 次
又丑又长的代码。。。
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
long long n;
cin>>n;
long long ans2 = n / 2;
long long ans3 = n / 3;
long long ans5 = n / 5;
long long ans7 = n / 7;
long long ans23 = n / 6;
long long ans25 = n / 10;
long long ans27 = n / 14;
long long ans35 = n / 15;
long long ans37 = n / 21;
long long ans57 = n / 35;
long long ans235 = n / 30;
long long ans237 = n / 42;
long long ans257 = n / 70;
long long ans357 = n / 105;
long long ans2357 = n / 210;
ans235 = ans235 - ans2357;
ans237 = ans237 - ans2357;
ans257 -= ans2357;
ans357 -= ans2357;
ans23 = ans23 - ans235 - ans237 - ans2357;
ans25 = ans25 - ans235 - ans257 - ans2357;
ans27 = ans27 - ans237 - ans257 - ans2357;
ans35 = ans35 - ans235 - ans357 - ans2357;
ans37 = ans37 - ans237 - ans357 - ans2357;
ans57 = ans57 - ans257 - ans357 - ans2357;
long long anssum = ans2 + ans3 + ans5 + ans7;
long long anssum1 = ans23 + ans25 + ans27 + ans35 + ans37 + ans57 + 2*ans235 + 2* ans237 + 2*ans257 + 2*ans357 + 3*ans2357;
long long ans = n - anssum + anssum1;
cout<<ans<<endl;
return 0;
}