当前位置: 首页 > news >正文

2019 ICPC 徐州区域赛 - C <3 numbers(素数密度)

题目链接


题目大意

给出一个区间 [ L , R ] [L,R] [L,R],问区间内的“小于3数”的个数是否小于 1 3 \frac{1}{3} 31。(实际上就是 1 1 1和所有素数)

解题思路

根据素数分布规律,素数越往后越分散。也可以自己推了一下,假设 x = 1 x=1 x=1,当 y = 48 y=48 y=48时,素数刚好占这个区间的三分之一,也就是按规律推广到一般情况,当 y − x + 1 > 48 y-x+1>48 yx+1>48,自己尝试一下打印个数,肯定是小于 1 3 \frac{1}{3} 31,就肯定是 Y e s Yes Yes。如果不是,考虑到数据范围到 1 e 9 1e9 1e9,因此使用区间素数筛选即可。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
typedef long long ll;
const int maxn=1e8; //maxn是b-a的最大值,即求素数的区间数量级
const int N=1e5;
bool is_prime[N]; //存[2,sqrt(b)]内的所有素数
bool is_prime_small[maxn]; //判断[a,b]范围内的每个数是不是素数
ll prime_num=0; //该区间素数的个数
//对区间[a,b)内的整数执行筛法,is_prime[i-a]=true  ---  表示i是素数 注意这里下标偏移了a,所以从0开始。
void segment_sieve(ll a,ll b) {
    for(ll i=2;i*i<=b;++i) is_prime_small[i]=true; //对[2,sqrt(b)]的初始化全为质数
    for(ll i=0;i<=b-a;++i) is_prime[i]=true; //对下标偏移后的[a,b]进行初始化

    for(ll i=2;i*i<=b;++i) {
        if(is_prime_small[i]) {
            for(ll j=2*i;j*j<=b;j+=i) is_prime_small[j]=false;  //筛选[2,sqrt(b)];
            //(a+i-1)/i得到最接近a的i的倍数,最低是i的2倍,然后筛选
            for(ll j=max(2LL,(a+i-1)/i)*i;j<=b;j+=i) is_prime[j-a]=false;
        }
    }
    for(ll i=a; i<=b; ++i)
        if(is_prime[i-a])
            if(i!=1)  
                prime_num++;
}
int main(){
    int n,x,y;
    cin>>n;
    while(n--){
        cin>>x>>y;
        if((y-x+1)>48) cout<<"Yes"<<endl;
        else{
            prime_num=0;
            segment_sieve(x,y);
            if(x==1) prime_num++; ///注意这里一定要特判不然WA到哭
            if(prime_num*3<y-x+1) cout<<"Yes"<<endl;
            else cout<<"No"<<endl;
        }
    }
    return 0;
}

相关文章:

  • 2019 ICPC 徐州区域赛 - A Cat(异或性质)
  • 2019 ICPC 南昌区域赛 - C And and Pair(思维+组合数学)
  • Android开发指南-框架主题-清单文件
  • 2019 ICPC 南昌区域赛 - G Eating Plan(技巧+暴力)
  • 离职的日子
  • 2019 ICPC 南京区域赛 - A A Hard Problem(找规律)
  • 走向架构师之路---开博寄语
  • JavaWeb拦截器拦截了静态资源的解决办法
  • 职业方向的选择
  • 2019 ICPC 南京区域赛 - H Prince and Princess(博弈+思维)
  • M2M----物联网的未来值得期待
  • 2019 ICPC 徐州区域赛 - E Multiply(Pollard-Rho质因数分解)
  • 备战3G —OMA 协议简介及公共文档下载
  • 2019 ICPC 银川区域赛 - B So Easy(思维)
  • 我的技术博客索引
  • centos安装java运行环境jdk+tomcat
  • es6(二):字符串的扩展
  • iOS 系统授权开发
  • MQ框架的比较
  • Transformer-XL: Unleashing the Potential of Attention Models
  • underscore源码剖析之整体架构
  • 简析gRPC client 连接管理
  • 警报:线上事故之CountDownLatch的威力
  • 前端技术周刊 2019-01-14:客户端存储
  • 无服务器化是企业 IT 架构的未来吗?
  • 一起参Ember.js讨论、问答社区。
  • 选择阿里云数据库HBase版十大理由
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ![CDATA[ ]] 是什么东东
  • # 数论-逆元
  • #define用法
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #预处理和函数的对比以及条件编译
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (9)目标检测_SSD的原理
  • (Git) gitignore基础使用
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (强烈推荐)移动端音视频从零到上手(上)
  • (三)c52学习之旅-点亮LED灯
  • (一)使用IDEA创建Maven项目和Maven使用入门(配图详解)
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)项目管理杂谈-我所期望的新人
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .net core使用ef 6
  • .net refrector
  • .NET 中小心嵌套等待的 Task,它可能会耗尽你线程池的现有资源,出现类似死锁的情况
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET/C# 使用反射注册事件
  • .net和php怎么连接,php和apache之间如何连接
  • :如何用SQL脚本保存存储过程返回的结果集
  • @AutoConfigurationPackage的使用