https://www.luogu.org/problemnew/show/P1835

对于40%,对每个数进行最大$O(\sqrt n)$的判断,因为n比较大所以超时。

想到线性筛,然而我们并不能筛到2e9,时间空间都不允许因为2e9素因子最大也到不了50000,我们预处理出2-50000以内的素数,然后对于每一个数,一个一个的出素因子,进行判断,这里放一下代码。

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
#include <stack>
#include <queue>
#include <cmath>
#include <map>
#define LL long long using namespace std;
int l,r,cnt;
bool p[],vis[];
int a[],tot;
void prepare()
{
for(int i=;i<=;i++)
{
if(!p[i])a[++tot]=i;
for(int j=;j<=tot&&i*a[j]<=;j++)
{
p[a[j]*i]=;
if(i%a[j]==)break;
}
}
}
int main()
{
prepare(); scanf("%d%d",&l,&r);
for(int i=l;i<=r;i++)
{
bool f=;
int k=sqrt(i);
for(int j=;a[j]<=k;j++)
{
if(i%a[j]==)
{
f=;
break;
}
}
if(!f)cnt++;
}
printf("%d",cnt);
}

似乎并不是很理想啊,只有90分,那么,我们利用线性筛的思想(用小的素因子来筛大的)。

我们对于每一个质数,最区间内这个数的倍数打上标记,最后统计个数。

然而,你可能会说数据组开不到那么大。

这里我们数组不用开的太大,假设数组为a,那么将l作为数组的第一个元素,这样的话数组最大1000000.

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <map>
using namespace std;
long long l,r,cnt,ans;
bool p[];
int a[],tot;
bool vis[];
void prepare()
{
for(int i=;i<=;i++)
{
if(!p[i])a[++tot]=i;
for(int j=;j<=tot&&i*a[j]<=;j++)
{
p[a[j]*i]=;
if(i%a[j]==)break;
}
}
}
int main()
{
prepare();
scanf("%lld%lld",&l,&r);
int c=sqrt(r);
for(int i=;i<=tot&&a[i]<=c;i++)
{
for(long long j=(l/a[i])*a[i];j<=r;j+=a[i])
{
if(j>=l&&j!=a[i])vis[j-l]=;
}
}
for(int i=;i<=r-l;i++)
if(!vis[i])ans++;
printf("%lld",ans);
}

洛谷 P1835 素数密度的更多相关文章

  1. [洛谷P1835]素数密度

    题目大意:求区间[l,r]中素数的个数($1\leq l,r\le 2^{31}$,$r-l\leq 10^6$). 解题思路:首先,用筛法筛出$2~\sqrt{r}$内的素数. 然后用这些素数筛l~ ...

  2. 【数论】8.30题解-prime素数密度 洛谷p1835

    prime 洛谷p1835 题目描述 给定区间[L, R](L <= R <= 2147483647, R-L <= 1000000),请计算区间中 素数的个数. 输入输出 输入 两 ...

  3. 【洛谷P1835】素数密度

    题目描述: 给定区间[L,R](L≤R≤2147483647,R-L≤1000000),请计算区间中素数的个数. 思路: 暴力: 蒟蒻:哦?绿题?这么水?(便打出下面代码) 这绝对是最容易想到的!但, ...

  4. P1835 素数密度_NOI导刊2011提高(04)

    题目描述 给定区间[L,R](L≤R≤2147483647,R-L≤1000000),请计算区间中素数的个数. 输入输出格式 输入格式: 两个数L和R. 输出格式: 一行,区间中素数的个数. 输入输出 ...

  5. [洛谷P1730] 最小密度路径

    类型:Floyd 传送门:>Here< 题意:定义一条路径密度 = 该路径长度 / 边数.给出一张$DAG$,现有$Q$次询问,每次给出$X,Y$,问$X,Y$的最小密度路径($N \le ...

  6. 洛谷 P3912 素数个数

    P3912 素数个数 题目描述 求1,2,\cdots,N1,2,⋯,N 中素数的个数. 输入输出格式 输入格式: 1 个整数NN. 输出格式: 1 个整数,表示素数的个数. 输入输出样例 输入样例# ...

  7. 洛谷P1730最小密度路径

    题目传送门; 首先理解题目,究其本质就是一个最短路问题,而且数据范围贼水,用floyd完全没问题,但是题目有变化,要求出路径边权值与边数之比,这里就可以考虑在把floyd中的二维数组变为三维,f[ i ...

  8. 洛谷P1730 最小密度路径(floyd)

    题意 题目链接 Sol zz floyd. 很显然的一个dp方程\(f[i][j][k][l]\)表示从\(i\)到\(j\)经过了\(k\)条边的最小权值 可以证明最优路径的长度一定\(\leqsl ...

  9. 【题解】洛谷P1463 [POI2002][HAOI2007] 反素数(约数个数公式+搜索)

    洛谷P1463:https://www.luogu.org/problemnew/show/P1463 思路 约数个数公式  ai为质因数分解的质数的指数 定理: 设m=2a1*3a2*...*pak ...

随机推荐

  1. 基础篇-密码文件.pgpass

    密码文件包含字段 host:port:dbname:user:password port和dbname可以使用*号作通配符 在*nix系统中 ~/.pgpass 在windows系统中 %APPDAT ...

  2. vue中修改swiper样式

    问题 vue单文件组件中无法修改swiper样式. 解决 1,单文件组件中:新增一个style 不加scoped 让它最终成为全局样式.只在其中操作swiper的样式. <style lang= ...

  3. Linux下从零开始学习Python之环境搭建

    我本人用的是Centos7.4版本,下载地址 archive.kernel.org/centos-vault/7.4.1708/isos/x86_64/CentOS-7-x86_64-DVD-1708 ...

  4. EOS Bios Boot Sequence

    EOS version:v1.0.5 Date:2018-06-19 Host: Centos 7 Reference :https://github.com/EOSIO/eos/wiki/Tutor ...

  5. Django之Form的ModelForm

    form与model的终极结合. from django import forms class BookForm(forms.ModelForm): class Meta: model = model ...

  6. BZOJ3622(容斥+dp)

    思路 "恰k个"考虑求至少k.k+1--个容斥 题面说所有数字都不同,可以将所求转化为糖比药多的组数恰为\((n+k)/2\)的方案数 \(f[i][j]\)数组我觉得更好的理解方 ...

  7. 通过sqlserver sa密码修改windows操作系统密码

    如果你不记得windows管理员的密码了,但知道sqlserver sa用户的密码,可以通过以下方式修改: 进入SQL之后执行以下语句: -- 允许配置高级选项  EXEC sp_configure ...

  8. 项目打包发布到tomcat中,中文出现乱码

    先吐槽一下,花了我3个小时,心累 本地运行正常,发布时maven插件里要加utf-8编码 https://blog.csdn.net/testcs_dn/article/details/4558379 ...

  9. 大都市 meg

    Description 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了.不过,她经常回忆起以前在乡间漫步的情景. 昔日,乡下有依次编号为1.. ...

  10. Redis集群批量操作

    Redis在3.0版正式引入了集群这个特性,扩展变得非常简单.然而当你开心的升级到3.0后,却发现有些很好用的功能现在工作不了了, 比如我们今天要聊的pipeline功能等批量操作. Redis集群是 ...