vj 题网址:点击打开链接
这道题 又一次证明了一个事 就是尽量少用map 特别是 内存给的特别小的情况下,尽量少用 听人家说(自己本人没有求证 如果有错 请大佬们指正),就是map 虽然是 有一个数 存一个数 假如说 你说 让map开的数组 mp【5】=1,然后 又mp【6】,但是mp里面并没有6 怎么办? mp 就开了一个内存 存储 6, 这个就很伤 ,虽然map 很快 但是感觉 (我和我的小伙伴都在泪水中明白的)map 很耗内存 只要你想来查找数。。。。 然后这道题 其实还好 我内存超限几次 然后还有几次 是因为 自己打表 没打好 怎么说 素数表总是想 开方打表 然后我就wa了 边存边打表 这个不能开方 要不后面的表就会没有存起来~~~~~ 话不多说了 直接上代码 代码感觉还是好敲的。。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <string>
#include <math.h>
#include <map>
using namespace std;
const int N=1e7+10;
int pm[N/2];
bool bj[N];
long long int i,j,dd=0;
int main()
{
bj[1]=bj[0]=1;
for(i=2; i<N-5; i++)
{
if(!bj[i])
{
pm[dd++]=i;
for(j=i*i; j<N; j+=i)
{
bj[j]=1;
}
}
}
int t,qw=0,l;
long long int ppp=0;
scanf("%d",&t);
while(t--)
{
qw++;
ppp=0;
scanf("%d",&l);
for(i=0; i<dd; i++)
{
if(pm[i]>(l+1)/2)
break;
if(bj[l-pm[i]]==0)
ppp++;
}
printf("Case %d: %lld\n",qw,ppp);
}
return 0;
}