#include #include #include #include #include #include #include #include #include #include using namespace std; #define REP(i, a, b) for (int i = (a), i##_end_ = (b); i < i##_end_; ++i) #define MP make_pair #define PB push_back #define SZ(x) (int((x).size())) #define ALL(x) (x).begin(), (x).end() #define X first #define Y second template inline bool chkmin(T &a, const T &b) { return a > b ? a = b, 1 : 0; } template inline bool chkmax(T &a, const T &b) { return a < b ? a = b, 1 : 0; } typedef long long LL; typedef pair pii; const LL MOD = 1e9 + 7; template inline bool RD(T &ret) { char c; int sgn; if (c = getchar(), c == EOF) return 0; while (c != '-' && (c<'0' || c>'9')) c = getchar(); sgn = (c == '-') ? -1 : 1 , ret = (c == '-') ? 0 : (c - '0'); while (c = getchar(), c >= '0'&&c <= '9') ret = ret * 10 + (c - '0'); ret *= sgn; return 1; } template inline void PT(T x) { if (x < 0) putchar('-') ,x = -x; if (x > 9) PT(x / 10); putchar(x % 10 + '0'); } const int N = 1e5 + 100; const int INF = 0x3f3f3f3f; bool p[N]; int cnt[N]; vector all; int main() { for(int i = 2; i <= N - 10; i ++) if(p[i] == 0) { all.PB(i); for(int j = 2 * i; j <= N - 10; j += i) p[j] = 1; } for(int i = 2; i <= N - 10; i ++) cnt[i] = cnt[i - 1] + (p[i] == 0); int T; RD(T); int sz = all.size(); while(T --) { int n, d; RD(n), RD(d); int lim = (n - 1) / d; int tmp = d; for(int i = 0; i < sz; i ++) { if(all[i] > lim || all[i] * 1LL * all[i] > d) break; else if(d % all[i] == 0) { tmp = all[i]; break; } } printf("%d\n", cnt[min((n - 1) / d, tmp)] ); } }