素数筛 + 前缀和 模板
素数筛 + 前缀和 模板
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 }
雪儿言