import math
    
def prime_sieve(limit):
    primes = [1 for x in xrange(limit)]
    primes[0] = 0
    primes[1] = 0
    imax = int(math.sqrt(limit) + 1)

    i = 2
    while (i < imax):
        j = i * i            # was: i+i
        while j < limit:
            primes[j] = 0
            j += i
        while True:
            i += 1
            if primes[i] == 1:
                break
    return primes

### s = prime_sieve(2000000)
### print( len( list( (i for i in xrange(len(s)) if s[i] == 1))))

# --i+i--                                 # --i*i--
#   N       n                             #    N       n  
#  10k     1229  0.02s-7.9M               #
#  2mln  148933  1.13s-7.9M               #  2mln  148933  1.12s-7.9M  
#  4mln  283146  2.30s-7.9M  n^1.11       #  4mln  283146  2.25s-7.9M  n^1.09
#  8mln  539777  4.58s-7.9M  n^1.07       #  8mln  539777  4.38s-7.9M  n^1.03
# 16mln 1031130  9.12s-7.9M  n^1.06       # 16mln 1031130  8.82s-7.9M  n^1.08



def sieve(max):
  primes = range(2,max+1)
  for i in primes:
    # print i, 
    j = i                        # was: j = 2
    while i * j <= primes[-1]:
      if i * j in primes:
        primes.remove(i*j)
      j += 1
  return primes
  
count = 0
for x in sieve(30000):
    count += 1
print count


# --j=2--                                # --j=i--
#   N     n                              #   N     n  
#   5k   669   0.35s-7.9M                #   5k   669   0.28s-7.9M
#  10k  1229   1.37s-7.9M  n^2.24        #  10k  1229   1.16s-7.9M  n^2.34
#  20k  2262   5.21s-7.9M  n^2.19        #  20k  2262   4.66s-7.9M  n^2.28
#  30k  3245  11.76s-7.9M  n^2.26        #  30k  3245  11.24s-7.9M  n^2.44