先给出一个sieve筛素数的模板:
poj 2689 Prime Distance 筛选法求给定区间内的素数
#include<stdio.h>
#include<math.h>
#define maxn 1024000
int L,U;
long long p[maxn],sz;
long long flag[maxn];
void sieve(long long L,long long U)
{
long long d=U-L+1,i,limit=(long long)sqrt((double)U);
for(i=0;i<d;i++)
flag[i]=1;
for(i=L&0x1;i<d;i+=2)
flag[i]=0;
for(i=3;i<=limit;i+=2)
{
if(i>L&&flag[i-L]==0)
continue;
int j=L/i*i;
if(j<L) j+=i;
if(j==i) j+=i; j=j-L;