1. 程式人生 > 其它 >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

持續更新中……