Cod sursa(job #2230170)

Utilizator radustn92Radu Stancu radustn92 Data 9 august 2018 12:49:01
Problema Ciurul lui Eratosthenes Scor 100
Compilator java Status done
Runda Arhiva educationala Marime 2.01 kb
import java.io.*;
import java.util.BitSet;
import java.util.StringTokenizer;

/**
 * Created by ccarabet on 8/9/18.
 */
public class Main {

    public static void main(String[] args) throws IOException {
        InputStream inputStream = new FileInputStream("ciur.in");
        OutputStream outputStream = new FileOutputStream("ciur.out");
        try (InputReader inputReader = new InputReader(inputStream);
            PrintWriter printWriter = new PrintWriter(outputStream)) {
            printWriter.println(Solver.countPrimesUpTo(inputReader.nextInt()));
        }
    }

    static class Solver {

        public static int countPrimesUpTo(int N) {
            BitSet bitSet = new BitSet(N + 1);
            for (int i = 2; i * i <= N; i++) {
                if (!bitSet.get(i)) {
                    for (int j = i * i; j <= N; j += i) {
                        bitSet.set(j);
                    }
                }
            }

            // only bits in interval [2, N] may be set. we deduct set bits in this interval
            return N - 1 - bitSet.cardinality();
        }
    }

    static class InputReader implements AutoCloseable {

        private BufferedReader bufferedReader;

        private StringTokenizer stringTokenizer;

        public InputReader(InputStream inputStream) {
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
            stringTokenizer = null;
        }

        private String nextToken() {
            if (stringTokenizer == null || !stringTokenizer.hasMoreTokens()) {
                try {
                    stringTokenizer = new StringTokenizer(bufferedReader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }

            return stringTokenizer.nextToken();
        }

        public int nextInt() {
            return Integer.parseInt(nextToken());
        }

        @Override
        public void close() throws IOException {
            bufferedReader.close();
        }
    }
}