把素数打出来, 然后按照题目运算。
#include <iostream>
#include <cstdio>
#define MAXN 1024000
using namespace std;
int n = 0;
int per[MAXN] = {1, 1}, table[80000];
void per_table() {
for(int i = 2; i <= 1000000; i++)
if(!per[i]) {
table[n++] = i;
for(int j = 2; j * i <= 1000000; j++)
per[i * j] = 1;
}
}
int main() {
per_table();
int N;
long long l, h;
cin >> N;
while(N--) {
int cnt = 0;
cin >> l >> h;
for(int i = 0; i < n; i++) {
long long t = table[i];
if(t > h) break;
while(t * table[i] <= h) {
t *= table[i];
if(t >= l) cnt++;
}
}
cout << cnt << endl;
}
return 0;
}