51 Nod 1284

题目链接: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;
}

猜你喜欢

转载自blog.csdn.net/lizhiwei2017/article/details/80529476
今日推荐