素数打表代码:
memset(a,0,sizeof a);
for(int i = 2; i<=maxn;i++)
if(!a[i])
{
for(int j = i; j <=maxn;j += i)
a[j] = a[j/i] + 1;
}
题目代码
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
int ans[5000001];
int main(void)
{
int cnt;
cin >> cnt;
for(int i = 2; i<=5000000;i++)//素数打表
{
if(!ans[i])
{
for(int j = i; j <= 5000000; j+=i)
ans[j]=ans[j/i]+1;
}
}
for(int i = 2; i<=5000000;i++)
ans[i]+=ans[i-1];
for(int i = 1; i<=cnt;i++)
{
int s ,e;
scanf("%d%d",&s,&e);
printf("%d\n",ans[s]-ans[e]);
}
}