#include <bits/stdc++.h>
#define IOS ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
using namespace std;
bool is_prime(int n, int divisor = 2) {
if (n <= 2) return (n == 2);
if (n % divisor == 0) return false;
if (divisor * divisor > n) return true;
return is_prime(n, divisor + 1);
}
int count_primes(int start, int end) {
if (start > end) return 0;
return is_prime(start) + count_primes(start + 1, end);
}
// For large ranges (like [10, 5000000]), this recursive approach will stack overflow
// Use Sieve of Eratosthenes with optimizations for large ranges
// int count_primes(int start, int end) {
// if (start > end) return 0;
// if (end < 2) return 0;
//
// // Adjust start to at least 2
// start = max(2, start);
//
// // Sieve of Eratosthenes
// vector<bool> is_prime(end + 1, true);
// is_prime[0] = is_prime[1] = false;
//
// for (int p = 2; p * p <= end; ++p) {
// if (is_prime[p]) {
// for (int multiple = p * p; multiple <= end; multiple += p) {
// is_prime[multiple] = false;
// }
// }
// }
//
// // Count primes in [start, end]
// int count = 0;
// for (int i = start; i <= end; ++i) {
// if (is_prime[i]) ++count;
// }
//
// return count;
// }
void solve() {
cout << count_primes(10, 20) << endl;
cout << count_primes(10, 200) << endl;
}
int main() {
IOS;
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgSU9TIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCk7Y2luLnRpZSgwKTtjb3V0LnRpZSgwKTsKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmJvb2wgaXNfcHJpbWUoaW50IG4sIGludCBkaXZpc29yID0gMikgewogICAgaWYgKG4gPD0gMikgcmV0dXJuIChuID09IDIpOwogICAgaWYgKG4gJSBkaXZpc29yID09IDApIHJldHVybiBmYWxzZTsKICAgIGlmIChkaXZpc29yICogZGl2aXNvciA+IG4pIHJldHVybiB0cnVlOwogICAgcmV0dXJuIGlzX3ByaW1lKG4sIGRpdmlzb3IgKyAxKTsKfQoKaW50IGNvdW50X3ByaW1lcyhpbnQgc3RhcnQsIGludCBlbmQpIHsKICAgIGlmIChzdGFydCA+IGVuZCkgcmV0dXJuIDA7CiAgICByZXR1cm4gaXNfcHJpbWUoc3RhcnQpICsgY291bnRfcHJpbWVzKHN0YXJ0ICsgMSwgZW5kKTsKfQoKLy8gRm9yIGxhcmdlIHJhbmdlcyAobGlrZSBbMTAsIDUwMDAwMDBdKSwgdGhpcyByZWN1cnNpdmUgYXBwcm9hY2ggd2lsbCBzdGFjayBvdmVyZmxvdwovLyBVc2UgU2lldmUgb2YgRXJhdG9zdGhlbmVzIHdpdGggb3B0aW1pemF0aW9ucyBmb3IgbGFyZ2UgcmFuZ2VzCgovLyBpbnQgY291bnRfcHJpbWVzKGludCBzdGFydCwgaW50IGVuZCkgewovLyAgICAgaWYgKHN0YXJ0ID4gZW5kKSByZXR1cm4gMDsKLy8gICAgIGlmIChlbmQgPCAyKSByZXR1cm4gMDsKLy8KLy8gICAgIC8vIEFkanVzdCBzdGFydCB0byBhdCBsZWFzdCAyCi8vICAgICBzdGFydCA9IG1heCgyLCBzdGFydCk7Ci8vCi8vICAgICAvLyBTaWV2ZSBvZiBFcmF0b3N0aGVuZXMKLy8gICAgIHZlY3Rvcjxib29sPiBpc19wcmltZShlbmQgKyAxLCB0cnVlKTsKLy8gICAgIGlzX3ByaW1lWzBdID0gaXNfcHJpbWVbMV0gPSBmYWxzZTsKLy8KLy8gICAgIGZvciAoaW50IHAgPSAyOyBwICogcCA8PSBlbmQ7ICsrcCkgewovLyAgICAgICAgIGlmIChpc19wcmltZVtwXSkgewovLyAgICAgICAgICAgICBmb3IgKGludCBtdWx0aXBsZSA9IHAgKiBwOyBtdWx0aXBsZSA8PSBlbmQ7IG11bHRpcGxlICs9IHApIHsKLy8gICAgICAgICAgICAgICAgIGlzX3ByaW1lW211bHRpcGxlXSA9IGZhbHNlOwovLyAgICAgICAgICAgICB9Ci8vICAgICAgICAgfQovLyAgICAgfQovLwovLyAgICAgLy8gQ291bnQgcHJpbWVzIGluIFtzdGFydCwgZW5kXQovLyAgICAgaW50IGNvdW50ID0gMDsKLy8gICAgIGZvciAoaW50IGkgPSBzdGFydDsgaSA8PSBlbmQ7ICsraSkgewovLyAgICAgICAgIGlmIChpc19wcmltZVtpXSkgKytjb3VudDsKLy8gICAgIH0KLy8KLy8gICAgIHJldHVybiBjb3VudDsKLy8gfQp2b2lkIHNvbHZlKCkgewogICBjb3V0IDw8IGNvdW50X3ByaW1lcygxMCwgMjApIDw8IGVuZGw7CiAgICBjb3V0IDw8IGNvdW50X3ByaW1lcygxMCwgMjAwKSA8PCBlbmRsOwp9CgppbnQgbWFpbigpIHsKICAgIElPUzsKICAgIHNvbHZlKCk7CiAgICByZXR1cm4gMDsKfQ==