# sieve
sieve <- function(N) {
  primes <- seq(1,N)
  sprimes <- numeric((N/2)-2)
  
  for(i in 2:(N/2)) {
    if(primes[i] != 0) { # prime
      primes[seq(2*i,N,i)] <- 0
      sprimes[i] <- sum(primes)
    }
  }
  mprimes <- tail(primes[which(primes!=0)],-2)
  dprimes <- diff(sprimes)
  sprimes <- sprimes[which(sprimes!=0)]
  nsieve <- length(unique(sprimes))
  nsieve
}


# par(mfrow=c(3,3))
# N <- seq(1000,18000,1000)
# for(n in N) {
#   D <- density(sieve(n))
#   plot(D, main=paste(D$n/n))
# }

N <- seq(1000, 50000, 1000) 
n <- numeric(50)

for(i in 1:50) {
  n[i] <- sieve(N[i])
}
par(mfrow=c(2,2))
plot(N, n, type='l')
# intercept 52, slope = 1.876e-04
# abline(model)