CodeForces 385C Bear and Prime Numbers :给定n个数和m个询问,对于每个询问n个数里面是l-r中质数倍数和(不重复) :筛法的技巧...

题意和范围:http://codeforces.com/problemset/problem/385/C

好题呀==

在筛质数的过程中顺带累加筛他的质数vis值

最后统计就是前缀和相减==

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int vis[20000005],f[20000005];
 6 int main()
 7 {
 8   int n,i,j,x,l,r,m;
 9   scanf("%d",&n);
10   memset(f,0,sizeof(f));
11   memset(vis,0,sizeof(vis));
12   for (i=1;i<=n;i++)
13   {
14     scanf("%d",&x);
15     f[x]++;
16   }
17   for (i=2;i<=20000000;i++)
18     if (vis[i]==0)
19     {
20       vis[i]+=f[i];
21       for (j=2;j*i<=20000000;j++)
22       {
23         vis[i*j]=-1;
24         vis[i]+=f[i*j];
25       }
26     }
27   f[0]=0;
28   for (i=1;i<=20000000;i++)
29     if (vis[i]!=-1) f[i]=f[i-1]+vis[i];
30     else f[i]=f[i-1];
31   scanf("%d",&m);
32   while (m--)
33   {
34     scanf("%d%d",&l,&r);
35     l--;
36     l=min(l,20000000);
37     r=min(r,20000000);
38     printf("%d\n",f[r]-f[l]);
39   }
40   return 0;
41 }
View Code

题目链接:见上

转载于:https://www.cnblogs.com/xiao-xin/articles/4372400.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值