首页 > 其他分享 >洛谷题解 | AT_abc321_c Primes on Interval

洛谷题解 | AT_abc321_c Primes on Interval

时间:2023-10-22 19:46:17浏览次数:46  
标签:输出 题目 题解 Interval 样例 素数 格式 Primes 输入

目录

题目翻译

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

现在给定一个正整数序列 $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;
} 

标签:输出,题目,题解,Interval,样例,素数,格式,Primes,输入
From: https://www.cnblogs.com/fire-wolf/p/17780916.html

相关文章

  • [ABC234E] Arithmetic Number 题解
    题目传送门一道枚举题。暴力枚举数字位数、首位、等差数列的公差即可。注意公差的枚举范围,并且需要看看末尾合不合法。顺便提一下,我是用字符串存储枚举的数字的,所以写了一个check函数代替大于号。Code#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;......
  • [ABC231E] Minimal payments 题解
    题目传送门一道贪心题。感觉很裸啊,模拟赛时随便乱写了个暴力递归就能过。每次找最接近钱数\(x\)的面额\(num\),如果比钱数少那么答案为剩下\(x\bmodnum\)钱数的答案加上\(x\divnum\)。否则答案则为剩下\(num-x\)钱数的答案加上\(1\)。Code#include<bits/stdc++.h......
  • ABC323D题解
    ABC323DMergeSlimes题目简述小A有\(N\)种橡皮泥。对于第\(i\)种橡皮泥,它的大小为\(S_i\)且一共有\(C_i\)个。小A可以合成两个大小相同的橡皮泥,若这两个橡皮泥大小为\(X\),则新和成的橡皮泥大小为\(2X\)。小A想知道,在进行若干次合成后(有可能\(0\)次),他能获得......
  • P9754 [CSP-S 2023] 结构体 题解
    前言在考场上调了2h+还没调出来,并且T4也没来得及做。希望看到这段文字的你能避免这样的悲剧。正文题目要求动态创建类型,于是我用结构体代表一个struct(禁止套娃),要新建就new出来一个。(最后也没delete)structObj{typnamtnam;lllen,align;std::map<std:......
  • CSP-S 2023 题解
    expect:\(100+100+65+25=290\)真实:\(100+85+0+15=205\),rk62感觉自己考的好烂好烂好烂T4这么简单竟然想不出来,感觉如果自己不被T4吓到,全做出来其实有望365+?今年CSP-S怎么这么简单吓得我不敢做了T1暴力T2考场做法:设\(lst_i\)表示\(a_i=a_{lst_i}\)并且\((......
  • pip安装慢问题解决
     一、永久修改pip软件安装默认源使用pipconfigsetglobal.index-url来直接指定下载源的URL,这样就不用手动修改配置文件了pipconfigsetglobal.index-urlhttps://pypi.tuna.tsinghua.edu.cn/simple以下是国内互联网常用的pypi安装源URL,在国内互联网下载的速度非常快......
  • CSP-S2023 题解
    更好的阅读体验CSP-S2023游记密码锁(lock)\(10^5\)枚举所有可能答案,然后判断。代码#include<bits/stdc++.h>intn;inta[13][7],b[7];boolcheck(inti){ intcnt=0; for(intj=1;j<=5;j++)cnt+=(a[i][j]!=b[j]); if(cnt==1)returntrue; else......
  • 【HAL 库复盘】自己手动创建工程模版Undefined symbol HAL_NVIC_SetPriority 问题解决
    1问题说明学习自己手动搭建一个STM32HAL库工程模板文件的时候,我发现了有6个错误,6个错误的类型是一样的,其中有3个通过添加hal_rcc.h和hal_gpio.c文件得以解决。所以另外3个我也想到了时缺少了对应的.c文件导致的错误。但是在STM32F1xx_HAL_Driver文件夹中,我没有找到类似如有“rcc......
  • P9752 [CSP-S 2023] 密码锁 题解
    分析最水S组T1。每次可以转动一个拨圈,或者转动相邻的两个拨圈,且幅度相同。那么就有一个简单粗暴的思路,枚举修改的方案,用vector来储存修改后的方案,存到map当中,当然也可以转换为数字存进去。切记要用两个map来储存,一个存方案,下文称为\(mp\),一个存这个方案在这个状态下......
  • springboot使用form标签在两个html页面之间实现界面跳转,出现405问题,但是一刷新就能出
    问题描述在我使用form标签的action属性实现两个html页面之间的跳转,但是出现了这样的问题:问题解决我尝试将这一块内容去掉:然后再次尝试:页面出来啦~问题解决啦~~......