1. 程式人生 > >素數篩 + 前綴和 模板

素數篩 + 前綴和 模板

namespace 模板 color efi bits return pos space sin

素數篩 + 前綴和 模板

 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 }

素數篩 + 前綴和 模板