码迷,mamicode.com
首页 > 其他好文 > 详细

素数筛 + 前缀和 模板

时间:2018-09-04 14:54:10      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:long   while   cout   fine   ace   span   bsp   else   模板   

素数筛 + 前缀和 模板

 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 }

 

素数筛 + 前缀和 模板

标签:long   while   cout   fine   ace   span   bsp   else   模板   

原文地址:https://www.cnblogs.com/weixq351/p/9584117.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!