链接:http://codeforces.com/problemset/problem/546/D
题意就是求a!/b!的质因子的个数和(重复的也算)
显然a!/b!的因子的个数和等于a!与b!的差
那么就需要预处理a!的前缀
首先先线性筛素数,因为重复的也算,所以需要除干净,具体看代码
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <vector>
#include <list>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#define inf 99999999
using namespace std;
const int MAX = 5000005;
int dv[MAX];
int main()
{
for (int i = 2; i < MAX; i++)
if (!dv[i])
for (int j = i; j < MAX; j += i)
{
int tmp = j;
while (tmp % i == 0)
{
tmp /= i;
dv[j]++;
}
}
for (int i = 1; i < MAX; i++)
dv[i] += dv[i - 1];
int q;
scanf("%d", &q);
while (q--)
{
int l, r;
scanf("%d %d", &r, &l);
printf("%d\n", dv[r] - dv[l]);
}
return 0;
}