博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Codeforces 385C 线性筛素数
阅读量:4709 次
发布时间:2019-06-10

本文共 769 字,大约阅读时间需要 2 分钟。

题意:给定一个数组,求[l,r] 区间,区间里的素数,数组中,能被这个素数整除的个数,再求和。

分析:区间很大,10^9了,找去区间内的素数是不可能的,但是,数组的数很小,而且要能整除区间内的素数,所以,这些很大的素数是没用的,筛出10^7以内的素数就ok了。

怎么算个数呢?

质因数分解,hash一下,再二分区间,应该是很麻烦了,但是网上还有麻烦的,还用到了线段树维护。

 

简单方式是:

将数组hash,在筛素数的时候,检测hash值,是否有这些数,有的话,记录到这个素数中,也就是说,这个数组中,能被这个素数整除的有s个,然后对s求一个前缀和,问题就转换为一个区间和。

 

#include 
using namespace std;//10^7以内的素数const int maxn = 10000000+5;int vis[maxn],g[maxn],s[maxn];int m;int main(int argc, char const *argv[]){ memset(vis,0,sizeof(vis)); memset(g,0,sizeof(g)); memset(vis,0,sizeof(vis)); int n; scanf("%d",&n); for(int i=0;i
=maxn) a = maxn-1; if(b>=maxn) b = maxn-1; printf("%d\n",s[b]-s[a-1]); } return 0;}
View Code

 

转载于:https://www.cnblogs.com/TreeDream/p/7256779.html

你可能感兴趣的文章
Timeout 时间已到。在操作完成之前超时时间已过或服务器未响应。
查看>>
获取两个时间之间的天数
查看>>
springboot 学习之路 2(注解介绍)
查看>>
vue项目引入自定义.css的样式文件
查看>>
RabbitMQ 将监听的IP从localhost修改为指定IP
查看>>
LeetCode-Trapping Rain Water-下雨积水-单调队列应用
查看>>
.Net 程序在自定义位置查找托管/非托管 dll 的几种方法
查看>>
ADO.net简单增删改查
查看>>
申请苹果开发者账号
查看>>
mysql的表锁和行锁,排他锁和共享锁。
查看>>
安装cartographer
查看>>
Java语法训练-打印各种三角形
查看>>
spring-dao.xml配置问题(一)
查看>>
SQLServer语句大使
查看>>
The Run-Time Constant Pool The Constant Pool
查看>>
剑指Offer-用两个栈实现队列
查看>>
Picker 移动端下拉框
查看>>
erlang局域网内通信
查看>>
ELMAH记录太多404错误,导致数据库超级大
查看>>
python接口自动化测试三十三:获取时间戳(10位和13位)和昨天、今天、明天
查看>>