题解:SP3505 CPRIME - Prime Number Theorem
题意:给定一个数
先用筛法预处理出
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll maxp = 1e7 + 10, maxn = 1e8 + 10;
ll p[maxp], cnt, pi[maxn];
void solve(ll n)
{
cout << fabs(pi[n] - n / log(n)) / pi[n] * 100 << '\n';
}
int main()
{
pi[0] = 1;
pi[1] = 1;
for (ll i = 2; i < maxn; i++)
{
if (!pi[i])
{
p[++cnt] = i;
}
for (ll j = 1; j <= cnt && i * p[j] < maxn; j++)
{
pi[i * p[j]] = 1;
if (i % p[j] == 0)
{
break;
}
}
}
pi[0] = 0;
for (ll i = 1; i < maxn; i++)
{
pi[i] = pi[i - 1] + !pi[i];
}
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
cout << fixed << setprecision(1);
ll n;
while (cin >> n, n)
{
solve(n);
}
return 0;
}