package task5;

public class PrimeNumberGeneratorAI {
    private final int maximum;

    public PrimeNumberGeneratorAI(int maximum) {
        this.maximum = maximum;
    }

    public void printPrimeNumbers() {
        for (int i = 2; i <= maximum; i++) {
            if (isPrime(i)) {
                System.out.println(i);
            }
        }
    }

    private boolean isPrime(int number) {
        if (number < 2) return false;
        if (number == 2) return true;
        if (number % 2 == 0) return false;
        for (int i = 3; i * i <= number; i += 2) {
            if (number % i == 0) {
                return false;
            }
        }
        return true;
    }

    public int countPrimes() {
        int count = 0;
        for (int i = 2; i <= maximum; i++) {
            if (isPrime(i)) {
                count++;
            }
        }
        return count;
    }

    public static void main(String[] args) {
        int[] testValues = {100, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000};

        System.out.println("maximum,Anzahl Primzahlen (Algorithmus),maximum/ln(maximum) (Schätzung)");
        for (int max : testValues) {
            PrimeNumberGeneratorAI generator = new PrimeNumberGeneratorAI(max);
            int counted = generator.countPrimes();
            double estimated = max / Math.log(max);
            System.out.printf("%d,%d,%.1f%n", max, counted, estimated);
        }
    }
}