A-Bi-show and Phi-show
题意及其思路
除去组数什么什么的限制就是要找(一个数+1)(下面用x表示它)及比它大的最小素数
先用埃筛打个表,1e6就ok,
然后找的时候切记咋方便咋来
第一次我用的二分找x或最贴近x且比x大的素数,爆了,
参照别人的写法,利用了一下v[maxn]数组,素数条件就是v[j]==j,
然后暴力从x往后找就ok,时间不会太长,(素数分布还算均匀哈哈哈)
ans记和的时候要开long long
代码
#include<iostream>
#include<string.h>
using namespace std;
const int maxn=1e6+1000;
int v[maxn],prime[maxn],m,T,n;
void primes(int n)
{
memset(v,0,sizeof(v));
for(int i=2;i<=n;i++)
{
if(v[i]==0)
{
v[i]=i;
prime[++m]=i;
}
for(int j=1;j<=m;j++)
{
if(prime[j]>v[i]||prime[j]>n/i)
break;
v[i*prime[j]]=prime[j];
}
}
}
int main()
{
primes(maxn);
scanf("%d",&T);
int t=0;
while(T--)
{
int n;
scanf("%d",&n);
long long ans=0;
for(int i=0;i<n;i++)
{
int x;
scanf("%d",&x);
for(int j=x+1;;j++)
{
if(v[j]==j)
{
ans+=j;
break;
}
}
}
printf("Case %d: %lld Xukha\n",++t,ans);
}
return 0;
}