// yukicoder: No.826 連絡網 // 2019.5.5 bal4u #include #include #define MAX 1000005 char notPrime[MAX] = { 1,1,0,0,1 }; // zero: if prime void sieve(int n) { int i, j, b; b = (int)sqrt((double)n); for (i = 3; i <= b; i += 2) { if (!notPrime[i]) { for (j = i * i; j <= n; j += i) notPrime[j] = 1; } } } int main() { int i, k, N, P, ans; scanf("%d%d", &N, &P); if (P == 1) { puts("1"); return 0; } sieve(N); i = 1 + (N>>1); if (!(i & 1)) i++; ans = 0, k = i; while (i <= N) { if (!notPrime[i]) ans++; i += 2; } if ((P & 1) && P >= k && !notPrime[P]) puts("1"); else printf("%d\n", N - ans - 1); return 0; }