思路:素数打表+记录
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <cstdio> #include <iostream> #include <cmath> #include <cstring> #include <algorithm> using namespace std; const int maxn =1000000 +10; bool vis[maxn]; int dp[maxn]; int main() { memset(vis,true,sizeof(vis)); vis[0]=vis[1]=0; for(int i=2;i*i<maxn;i++) { if(vis[i]) for(int j=2*i;j<maxn;j+=i) vis[j]=0; } dp[0]=dp[1]=0; for(int i=2;i<maxn;i++) { if(vis[i]) dp[i]=dp[i-1]+1; else dp[i]=dp[i-1]; } int t; scanf("%d",&t); while(t--) { int l,r; scanf("%d%d",&l,&r); printf("%d ",dp[r]-dp[l-1]); } return 0; }