fbpx

Problema #3314 – Eratostene3 – Rezolvari PBInfo

de Mihai-Alexandru

Cerința

Se dau n numere naturale nenule. Aflaţi pentru fiecare număr dat x, câte numere naturale nenule mai mici sau egale cu x sunt prime cu x?

Date de intrare

Fișierul de intrare eratostene3.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.

Date de ieșire

Fișierul de ieșire eratostene3.out va conține pentru fiecare număr x din fişierul de intrare, numărul de numere naturale nenule mai mici sau egale cu x, prime cu x.

Restricții și precizări

  • 1 ≤ n ≤ 100.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000

Exemplu

eratostene3.in

3
4 7 12

eratostene3.out

2 6 4

Explicație

Numerele prime cu 4, mai mici sau egale cu 4, sunt: 1,3.
Numerele prime cu 7, mai mici sau egale cu 7, sunt: 1,2,3,4,5,6.
Numerele prime cu 12, mai mici sau egale cu 12, sunt: 1,5,7,11.
Vezi Indicatorul lui Euler.

#include <bits/stdc++.h>
using namespace std;

ifstream cin("eratostene3.in");
ofstream cout("eratostene3.out");

int E[1000001], n;
long long int t;

int main(){
    cin >> n;
    for(int i = 1; i <= 1000000; ++i)
        E[i] = i - 1;
    E[1] = 1;
    for(int i = 2; i <= 1000000; ++i)
        for(int j = 2 * i; j <= 1000000; j = j + i)
            E[j] = E[j] - E[i];
    for(int i = 1; i <= n; ++i){
        int x;
        cin >> x;
        cout << E[x] << ' ';
    }
    return 0;
}
Comentarii

S-ar putea sa iti placa