Cod sursa(job #2606692)

Utilizator lev.tempfliTempfli Levente lev.tempfli Data 28 aprilie 2020 11:46:05
Problema Ciurul lui Eratosthenes Scor 30
Compilator py Status done
Runda Arhiva educationala Marime 0.87 kb
def input_gen_int(fnmae):
    with open(fnmae, 'rt') as fin:
        for line in fin:
            for val in line.split():
                yield int(val)


class ErasSieve:
    primes = []
    n = 0

    def __init__(self, nn):
        self.n = nn
        self.primes = [1 for _ in range(n + 1)]
        self.generate()

    def isprime(self, i):
        return self.primes[i]

    def generate(self):
        self.primes[0] = 0
        self.primes[1] = 0
        for i in range(2, self.n + 1):
            if self.primes[i] == 1:
                for j in range(2 * i, self.n + 1, i):
                    self.primes[j] = 0


if __name__ == '__main__':
    ig = input_gen_int("ciur.in")
    n = next(ig)
    sv = ErasSieve(n)
    k = 0
    for i in range(2, n + 1):
        if sv.isprime(i):
            k += 1
    with open('ciur.out', 'wt') as fout:
        fout.write('{}'.format(k))