本题可以直接用结论,或者用DP做。。。
哥德巴赫猜想:任何大于偶数都等于两个素数和;
分类:大于2的偶数,价值为2
奇数:若是质数价值为1,若是等于两个质数之积价值是2,若是等于2加上某个质数价值等于2,其他价值等于3
#include <stdio.h>
#include <string.h>
#define N 50003
bool prime[N];
int value[N];
int p[N];
int k=0;
void isprime()
{
int i,j;
memset(prime,1,sizeof(prime));
memset(value,0,sizeof(value));
value[2]=1;
for(i=2;i<N-2;i++)
{
if(prime[i])
{
p[k++]=i;
value[i]=1;
value[i+2]=2;
for(j=i+i;j<N;j+=i)
{
prime[j]=false;
}
}
}
int z;
for(i=0;i<k;i++)
{
for(j=0;j<k;j++)
{
z=p[i]*p[j];
if(z<N)
value[z]=2;
else
break;
}
}
for(i=4;i<N;i+=2)
value[i]=2;
for(i=3;i<N;i+=2)
if(value[i]==0)
value[i]=3;
}
int main()
{
int a,b,t,i,s;
isprime();
scanf("%d",&t);
while(t--)
{
s=0;
scanf("%d%d",&a,&b);
for(i=a;i<=b;i++)
s+=value[i];
printf("%d\n",s);
}
return 0;
}