1 #include <stdio.h>
2 #include<math.h>
3 #define N 4000001
4 int prime[N];
5 int numm[N];
6 int main()
7 {
8 int i, j,a,b,t;
9 for(i=2; i<N; i++)
10 if(i%2) prime[i]=true;
11 else prime[i]=false;
12 for(i=3; i<=sqrt(N); i++)
13 { if(prime[i])
14 for(j=i+i; j<N; j+=i) prime[j]=false;
15 }
16
17 prime[2]=true;
18 numm[1]=0;
19 for( i=2;i<N;i++)
20 numm[i]=numm[i-1]+(int)prime[i];
21 while(~scanf("%d%d",&a,&b),a,b)
22 {
23 t=0;
24 if(prime[a])t++;
25 //if(prime[b])t++;
26 printf("%d\n",numm[b]-numm[a]+t);
27 }
28 return 0;
29 }
求给出两个数之间有多少个素数
感觉没有用到太多NP,直接筛法求出素数后,然后统计i之前有多少个素数,最后print