素数筛 + 前缀和 模板
1 #include <bits/stdc++.h>
2 #define ll long long int
3 #define N 20000002
4 using namespace std;
5 int sum[N];
6 bool a[N];
7 int b[N];
8 int cnt = 0;
9 int t,n;
10
11 int main()
12 {
13 a[0] = true;
14 for(int i=2; i*i<N; i++)
15 {
16 ll k = i*i;
17 for(int j = k; j<N; j+=k)
18 {
19 a[j] = true;
20 }
21 }
22 for(int i=1; i<N; i++)
23 {
24 if(!a[i])
25 {
26 sum[i] = sum[i-1]+1;
27 b[cnt++] = i;
28 }
29 else
30 sum[i] = sum[i-1];
31 }
32 cin>>t;
33 while(t--)
34 {
35
36 cin>>n;
37 ll ans = 0;
38 for(int i=0; i<cnt&&b[i]<=n; i++)
39 {
40 int pos = n/b[i];
41 ans += sum[pos];
42 }
43 cout<<ans<<endl;
44 }
45 return 0;
46 }