Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2017-05-27 14:34:43.
Revizia anterioară   Revizia următoare  

 

Fişierul intrare/ieşire:sieve.in, sieve.outSursăACM-ICPC Faza Nationala 2017
AutorMihai CalanceaAdăugată deklamathixMihai Calancea klamathix
Timp execuţie pe test0.5 secLimită de memorie131072 kbytes
Scorul tăuN/ADificultateN/A

Vezi solutiile trimise | Statistici

Sieve

//Povestea va fi schimbata

In aceasta problema vom analiza cum se comporta Ciurul lui Eratosthene daca in loc sa parcurgem numerele in ordinea {2, 3, 4, .. N}, le parcurgem in ordinea data de o permutare aleatoare a acestor numere. Mai exact, dandu-se acest pseudocod:

int countSteps(int n, vector<int> p) {
    vector<bool> Composite(n + 1, false);
    int steps = 0;

    // p este o permutare a multimii {2, 3, ..., n}

    for(int index = 0; index < n - 1; ++index) {
        if(not Composite[p[index]]) {
            for(int multiple = 2 * p[index]; multiple <= n; multiple += p[index]) {
                Composite[multiple] = true;
                steps += 1;
            }
        }
    }

    return steps;
}

Ne intrebam care este valoarea medie intoarsa de functia countSteps() daca permutarea p este generata aleator si uniform.

Date de intrare

Fişierul de intrare sieve.in ...

Date de ieşire

În fişierul de ieşire sieve.out ...

Restricţii

  • ... ≤ ... ≤ ...

Exemplu

sieve.insieve.out
1
250
577.8554834
Trebuie sa te autentifici pentru a trimite solutii. Click aici

Cum se trimit solutii?