#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define FOR(i,c) for(__typeof((c).begin()) i=(c).begin();i!=(c).end();i++) #define ALL(x) (x).begin(),(x).end() #define CASET2 int ___T, case_n = 1; scanf("%d ", &___T); while ((___T > 0 ? printf("Case #%d:\n", case_n++) : 0), ___T-- > 0) #define CASET1 int ___T, case_n = 1; scanf("%d ", &___T); while ((___T > 0 ? printf("Case #%d: ", case_n++) : 0), ___T-- > 0) #define CASET int ___T; scanf("%d ", &___T); while (___T-- > 0) #define SZ(X) ((int)(X).size()) #define LEN(X) strlen(X) #define REP(i,n) for(int i=0;i=(b);i--) #define REPL(i,x) for(int i=0;x[i];i++) #define PER(i,n) for(int i=(n)-1;i>=0;i--) #define RI1(x) scanf("%d",&x) #define RI2(x,y) RI1(x), RI1(y) #define RI3(x,y...) RI1(x), RI2(y) #define RI4(x,y...) RI1(x), RI3(y) #define RI5(x,y...) RI1(x), RI4(y) #define RI6(x,y...) RI1(x), RI5(y) #define GET_MACRO(_1, _2, _3, _4, _5, _6, NAME, ...) NAME #define RI(argv...) GET_MACRO(argv, RI6, RI5, RI4, RI3, RI2, RI1)(argv) #define DRI(argv...) int argv;RI(argv) #define WRI(argv...) while (RI(argv) != EOF) #define DWRI(x...) int x; WRI(x) #define RS(x) scanf("%s",x) #define MP make_pair #define PB push_back #define MS0(x) memset(x,0,sizeof(x)) #define MS1(x) memset(x,-1,sizeof(x)) #define X first #define Y second #define V(x) vector typedef long double LD; typedef pair PII; typedef vector VI; typedef long long LL; const int INF = 1000000000; void print(int i) { printf("%d", i); } template void PI(T i) { print(i); puts(""); } template void PIS(T i) { print(i); printf(" "); } template void PV(T const &v, int N) { REP(i, N) { print(v[i]); printf("%c", i == N-1 ? '\n' : ' '); } } template void PV(T const &v) { PV(v, SZ(v)); } template bool has_bit(T mask, S i) { return (mask >> i) & 1; } long long shift(int i) { return 1ll << i; } template void mini(C&a4, C b4){a4=min(a4, b4); } template void maxi(C&a4, C b4){a4=max(a4, b4); } int popcount(int x) { return __builtin_popcount(x); } int popcount(long long x) { return __builtin_popcountll(x); } #define DRL(x) LL x; RL(x) #ifndef LOCAL #define PL(x) printf("%I64d\n",x) #define RL(x) scanf("%I64d\n",&x) #else #define PL(x) printf("%lld\n",x) #define RL(x) scanf("%lld\n",&x) #endif int divisor[10000000]; int main() { #ifdef CPP11 static_assert(false, "CPP11"); #endif VI primes; for (int p = 2; p < 10000000; p++) { if (!divisor[p]) { primes.PB(p); for (int k = p; k < 10000000; k += p) { if (!divisor[k]) { divisor[k] = p; } } } } CASET { DRI(N, d); N--; if (d >= N) { PI(0); continue; } if (d < 10000000) { int md = min(N / d, divisor[d]); PI(upper_bound(ALL(primes), md) - primes.begin()); } else { int c = 0; FOR(it, primes) { int p = *it; if (1ll * p * d > N) { break; } c++; if (d % p == 0) { break; } } PI(c); } } return 0; }