题解:P11169 「CMOI R1」Bismuth / Linear Sieve
提示
本片题解用的是题面代码里的变量。
思路
我们可以先特判
首先我们看样例。
- 我们会发现输出的第一个数是
\lceil \frac{n}{2}\rceil 。
首先,第一个加入
第二个输出的数没有那么简单了。虽然
假设我们现在已经有一个无限长的
你考虑一下什么时候
我们可以预处理出
AC CODE
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, cnt, ans;
int p[10000005];
signed main()
{
cin >> n;
if (n == 1)
return cout << 0 << ' '<< 0 << '\n', 0;
cout << (n + 1) / 2 << ' ';
int now = 2, ans = 0;
ans = ans + (n / 2 / 2);
for (int i = 3;; i += 2)
{
if ((__int128)(now / __gcd(now, i) * i > n))
break;
now = now / __gcd(now, i) * i;
ans = ans + (n / i / now);
}
cout << ans << '\n';
return 0;
}