#include #include #include #include #include #define rep(i, n) for(i = 0; i < n; i++) using namespace std; using namespace atcoder; typedef tuple T; const int MAX = 1000001; bool isPrime[MAX]; vector ps[MAX]; int q; vector vecT; vector nums[MAX]; //nums[最大の約数] int main() { int i, j; rep(i, MAX) isPrime[i] = true; isPrime[0] = isPrime[1] = false; for (i = 2; i < MAX; i++) { if (isPrime[i]) { for (j = 2 * i; j < MAX; j += i) { isPrime[j] = false; ps[j].push_back(i); } ps[i].push_back(i); } } cin >> q; rep(i, q) { int l, r; cin >> l >> r; vecT.push_back(T(l, r, i)); } sort(vecT.begin(), vecT.end()); for (i = 1; i < MAX; i++) { int y = (i == 1) ? 0 : i / ps[i][0]; nums[y].push_back(i); } vector ans(q, -1); fenwick_tree fw(MAX); int cor = 0; rep(i, vecT.size()) { int l = get<0>(vecT[i]), r = get<1>(vecT[i]), id = get<2>(vecT[i]); for (; cor < l; cor++) { for (int num: nums[cor]) { fw.add(num, 1); } } ans[id] = fw.sum(l, r + 1); } rep(i, ans.size()) { cout << ans[i] << endl; } return 0; }