洛谷题解 | AT_abc321_c Primes on Interval

题解,at,abc321,primes,on,interval · 浏览次数 : 2

小编点评

**样例 #1样例输入 #12 4 2** **样例输出 #13** **样例 #2样例输入 #26 13 1** **样例输出 #24** **样例 #3样例输入 #31 4 3** **样例输出 #3-1**

正文

题目翻译

【题目描述】
你决定用素数定理来做一个调查. 众所周知, 素数又被称为质数,其含义就是除了数字一和本身之外不能被其他任何的数字除尽.

现在给定一个正整数序列 $a,a+1,\cdots,b$ $(a \le b)$, 请找出一个最小值 $l$, 使其满足对于任意一个长度为 $l$ 的子串, 都包含 $k$ 个质数.

找到并输出符合要求的最小值 $l$, 如果不存在符合要求的长度 $l$, 则输出 $-1$.

【输入格式】

输入一行, 包含三个用空格隔开的整数 $a,b,k$ ($1 \le a,b,k \le 10^{6}; a \le b$)

【输出格式】
输出一行, 为符合要求的最小值 $l$, 若不存在, 输出 $-1$.

题目描述

You've decided to carry out a survey in the theory of prime numbers. Let us remind you that a prime number is a positive integer that has exactly two distinct positive integer divisors.

Consider positive integers $ a $ , $ a+1 $ , $ ... $ , $ b $ $ (a<=b) $ . You want to find the minimum integer $ l $ $ (1<=l<=b-a+1) $ such that for any integer $ x $ $ (a<=x<=b-l+1) $ among $ l $ integers $ x $ , $ x+1 $ , $ ... $ , $ x+l-1 $ there are at least $ k $ prime numbers.

Find and print the required minimum $ l $ . If no value $ l $ meets the described limitations, print -1.

输入格式

A single line contains three space-separated integers $ a,b,k $ ( $ 1<=a,b,k<=10^{6}; a<=b $ ).

输出格式

In a single line print a single integer — the required minimum $ l $ . If there's no solution, print -1.

样例 #1

样例输入 #1

2 4 2

样例输出 #1

3

样例 #2

样例输入 #2

6 13 1

样例输出 #2

4

样例 #3

样例输入 #3

1 4 3

样例输出 #3

-1

题目简化

求一个区间内,任意长度为 $l$ 的子串中都包含 $k$ 个质数的最小 $l$。

题目思路

初始化一个数组存储从 $2$ 开始的所有素数。初始化后,这个数组中所有值都是 true,表示对应的数是素数。

使用埃拉托斯特尼筛法(Sieve of Eratosthenes)来找出所有小于 $MAX$ 的素数。这个算法的主要思想是,如果一个数不是素数,那么它必定有一个因子小于或等于其平方根。因此,我们只需要检查到每个数的平方根即可。

在主循环中,读取三个输入:$a$, $b$ 和 $k$。然后,创建一个队列 $q$ 并把 $a-1$ 放入队列。

接下来,进行一系列操作来找出在区间 $\text [a, b]$ 中,长度为 $k$ 的所有素数子序列。如果存在这样的子序列,那么就更新 $res$ 的值。

如果 $q$ 的头部元素是 $a-1$,那么就输出 $\texttt -\texttt 1$,否则输出 $res$。

AC代码

#include <bits/stdc++.h>
using namespace std;
#define li        long long int
#define rep(i,to) for(li i=0;i<((li)(to));++i)
#define pb        push_back
#define sz(v)     ((li)(v).size())
#define bit(n)    (1ll<<(li)(n))
#define all(vec)  (vec).begin(),(vec).end()
#define each(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++)
#define MP        make_pair
#define F         first
#define S         second


#define MAX 1000500
li is_prime[MAX];

int main()
{
    rep(i, MAX)if(2 <= i) is_prime[i] = true;
    for(li i = 2; i * i < MAX; i++){
        if(!is_prime[i]) continue;
        for(li j = i * i; j < MAX; j += i) is_prime[j] = false;
    }
    li a, b, k;
    cin >> a >> b >> k;
    queue<li> q;
    li res = -1;
    q.push(a - 1);
    for(li pos = a; pos <= b; pos++){
        if(is_prime[pos]) q.push(pos);
        while(k < sz(q)) q.pop();
        if(sz(q) == k) res = max(res, pos - q.front() + 1);
    }
    if(q.front() == a - 1) cout << -1 << endl;
    else cout << res << endl;
} 

创作不易,白嫖不好,各位的支持和认可,就是我创作的最大动力,如果喜欢我的文章,给个关注吧!

冰焰狼 | 文

如果本篇博客有任何错误,请批评指教,不胜感激 !

与洛谷题解 | AT_abc321_c Primes on Interval相似的内容:

洛谷题解 | AT_abc321_c Primes on Interval

目录题目翻译题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2样例 #3样例输入 #3样例输出 #3题目简化题目思路AC代码 题目翻译 【题目描述】 你决定用素数定理来做一个调查. 众所周知, 素数又被称为质数,其含义就是除了数字一和本身之外不能被其

洛谷题解 | P1051 谁拿了最多奖学金

​目录 题目描述 输入格式 输出格式 输入输出样例 提示 题目思路 AC代码 题目描述 某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同: 1. 院士奖学金,每人 8000 元,期末平均成绩高于 80 分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可

洛谷题解 | P5660 数字游戏

​ 目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目简化 题目思路 AC代码 题目描述 小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想要知道字符串中究竟有多少个 1。 注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101

洛谷题解 | P1046 陶陶摘苹果

​ 目录 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目思路 AC代码 题目描述 陶陶家的院子里有一棵苹果树,每到秋天树上就会结出 10 个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个 30 厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。 现在已知 10 个

无所畏惧的求和题解

# 无所畏惧的求和题解 > 本题是本人目前出的题中难度最高的题。 > > 加强版紫色是肯定可以的。 > > 题目链接:[无所畏惧的求和 - 洛谷](https://www.luogu.com.cn/problem/U289496) > > 尽情享受吧! 这道题其实做法有很多: - 待定系数法 + 矩

[NOIP2008 提高组] 笨小猴(洛谷题号P1125)

[NOIP2008 提高组] 笨小猴 题目描述 笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大! 这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次

洛谷官方题单--线段树

前言 发现线段树根本不会写,所以想要完成洛谷官方题单来稍微提升一下... 持续更新ing [ ] P3870 [TJOI2009] 开关 明确了写线段树要思考的几个点 1.如何update,即如何合并子节点的信息,这里就是直接将子节点的灯的数量相加即可 2.如何modify,即如何根据tag修改该节

洛谷P2433 小学数学 N 合一

写完了这道题结果脑子断电把浏览器关了。。。。。。打开一看 没保存 寄 传送门:【深基1-2】小学数学 N 合一 - 洛谷 第一题 第二题 第三题 这几道题没啥好说的,直接输出就彳亍了 cout << "I love Luogu!" << endl; cout << “6 4” << endl; co

算法学习笔记(3): 倍增与ST算法

倍增 目录倍增查找 洛谷P2249重点变式练习快速幂ST表扩展 - 运算扩展 - 区间变式答案倍增更多的用法优化矩形查询优化建图优化 DP作者有话说 倍增,字面意思即”成倍增长“ 他与二分十分类似,都是基于”2“的划分思想 那么具体是怎么样,我们以一个例子来看 查找 洛谷P2249 依据题面,我们知

YNOI 做题记

YNOI 做题记 偶然有一天做到了其中的一道题,于是便开始做相关的题了…… [Ynoi2015] 我回来了 - 洛谷 这之一场联考搬过来的题……于是考场上写了一个 \(O((n + m)\log^2 n)\) 的代码,然后成功被卡掉,非常慢速。 其实离线,将每一个伤害答案变化的时间做出来,然后加入时