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. Python学习笔记(异常处理)

    用户输入了一个不合规定的值,或者需要打开的文件不存在.这些情况被称作“异常”,一个好的程序需要能处理可能发生的异常,避免程序因此而中断. 例如我们去打开一个文件: f = file('non-exis ...

  2. Tomcat乱码问题

    问题:淇℃伅 [main] org.apache.catalina.startup.VersionLoggerListener.log Server容器启动乱码--tomcat 解决:修改.tomca ...

  3. Mysql 5.7 账户过期重启

    关闭mysql 重启mysql57

  4. css布局全总结

    一  居 中 布 局 水平居中 1. 使用inline-block+text-align(1)原理.用法 原理:先将子框由块级元素改变为行内块元素,再通过设置行内块元素居中以达到水平居中. 用法:对子 ...

  5. 题解 P1006 传纸条

    传送门 其实我觉得这个跟P1004挺类似(又是动规) 题解P1004 #include<iostream> #include<cstdio> #include<cstri ...

  6. Java通过图片url地址获取图片base64位字符串的两种方式

    工作中遇到通过图片的url获取图片base64位的需求.一开始是用网上的方法,通过工具类Toolkit,虽然实现的代码比较简短,不过偶尔会遇到图片转成base64位不正确的情况,至今不知道为啥. 之后 ...

  7. Linux上常用命令整理(二)—— paste

    上一篇整理了cat指令的几个基本常见用法,这次整理一下paste指令的基本用法. cat paste cut grep paste paste可以简单的理解为把两个文件的内容按列合并,与cat命令直接 ...

  8. winform 程序隐藏窗口运行

    DWPublishForm frm = new DWPublishForm(); frm.IsAutoUpdate = true; frm.ShowInTaskbar = false; frm.For ...

  9. Nuxt使用记录

    代码及插件需要根据环境引入 (服务端没有window,document,浏览器端没有global) const myPlugins = { install(Vue, options) { Vue.pr ...

  10. 架构演进历程及为什么选择Spring Cloud

    单体式架构: 垂直拆分: 垂直拆分的特点: 分布式服务: 分布式服务的特点: SOA面向服务的架构: 服务治理: 微服务: 微服务结构: 服务调用方式: http客户端工具: