2021杭电多校第六场题解

时间:2021-08-06
本文章向大家介绍2021杭电多校第六场题解,主要包括2021杭电多校第六场题解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

多校越来越难了……

A

发现只有可能连着1~2个正数的和是质数,然后很容易发现没有-1的情况,因为无论如何答案是[-t,t+1]或者[-t,t+2]或者[x,x]或者[x-1,x]或者[x,x+1],除了0的情况很特殊直接输出3。然后就是暴力判断即可

#include<bits/stdc++.h>
using namespace std;
const int N=2e7+70;
int n,cnt,pri[N/10],n1[N/2],n2[N/2];
bool vis[N],is[N];
int main()
{
    int T;scanf("%d",&T);
    n=2e7+7;
    vis[1]=1;
    for(int i=2;i<=n;++i)
    {
        if(!vis[i])pri[++cnt]=i;
        for(int j=1;j<=cnt&&i*pri[j]<=n;++j)
        {
            vis[i*pri[j]]=1;
            if(i%pri[j]==0)break;
        }
    }
    for(int i=1e7+1;i;--i)if(!vis[i*2+1])n2[i]=i;else n2[i]=n2[i+1];
    for(int i=1e7+19;i;--i)if(!vis[i])n1[i]=i;else n1[i]=n1[i+1];
    while(T--)
    {
        scanf("%d",&n);
        int ans1,ans2;
        if(!n)puts("3");
        else if(n<0)printf("%d\n",min(2*n1[1-n],2*n2[1-n]+1));
        else if(n==n1[n])puts("1");
        else if(n-1==n2[n-1]||n==n2[n])puts("2");
        else printf("%d\n",min(2*n1[n],2*n2[n]+1));
    }
}
View Code

持续更新中……

原文地址:https://www.cnblogs.com/hfctf0210/p/15110413.html