#include <stdio.h>
const int MAXN = 1e6+500;
bool vis[MAXN]; // 筛选MAXN个素数
int prime[80000]; // 把素数依次存放在该数组中
int abQuJian[MAXN];
void isPrime()
{
for (int i = 2; i < MAXN; i ++)
{
if ( !vis[i])
#include <stdio.h>
const int MAXN = 1e6+500;
bool vis[MAXN]; // 筛选MAXN个素数
int prime[80000]; // 把素数依次存放在该数组中
int abQuJian[MAXN];
void isPrime()
{
for (int i = 2; i < MAXN; i ++)
{
if ( !vis[i])
prime[++prime[0]] = i; // prime[0] --> 筛选出的素数个数
for (int j = 1; j <= prime[0] && i <= MAXN/prime[j]; j ++)
{
vis[i*prime[j]] = 1;
if (i % prime[j] == 0)
break;
}
}
}
void solve()
{
for (int i = 2; i < prime[0]; i ++)
{
int n = (prime[i]+prime[i+1])/2;
abQuJian[n] = 1;
}
for (int i = 2; i <= MAXN; i ++)
abQuJian[i] += abQuJian[i-1];
}
int main()
{
isPrime(); // 欧拉筛
solve(); // 前缀和
int T,a,b;
scanf("%d",&T);
while ( T --)
{
scanf("%d %d",&a,&b);
printf("%d\n",abQuJian[b]-abQuJian[a-1]);
}
} // prime[0] --> 筛选出的素数个数
for (int j = 1; j <= prime[0] && i <= MAXN/prime[j]; j ++)
{
vis[i*prime[j]] = 1;
if (i % prime[j] == 0)
break;
}
}
}
void solve()
{
for (int i = 2; i < prime[0]; i ++)
{
int n = (prime[i]+prime[i+1])/2;
abQuJian[n] = 1;
}
for (int i = 2; i <= MAXN; i ++)
abQuJian[i] += abQuJian[i-1];
}
int main()
{
isPrime(); // 欧拉筛
solve(); // 前缀和
int T,a,b;
scanf("%d",&T);
while ( T --)
{
scanf("%d %d",&a,&b);
printf("%d\n",abQuJian[b]-abQuJian[a-1]);
}
}
这段代码里面prime(++prime(0))为什么要这么写啊,直接用一个变量计数不行吗如:peime(++i)不行吗