Rezolvare completă PbInfo #3408 joc2020

Cerința

Gigel a descoperit un nou joc. Jocul are n nivele și la fiecare nivel îți dă câte un număr natural x. Pentru a trece nivelul trebuie să calculezi câți divizori are numărul x. Scrieți un program care să permită terminarea jocului prin trecerea celor n nivele în ordinea în care sunt date.

Date de intrare

Fișierul de intrare joc2020.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 joc2020.out va conține pe prima linie n numere, fiecare reprezentând numărul de divizori ai numărului corespunzător din fişierul de intrare.

Restricții și precizări

  • 1 ≤ n ≤ 500.000
  • numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu 1.000.000
  • pentru 50 de puncte n ≤ 10.000

Exemplu

joc2020.in

7
30 5 44 210 1 35 30030

joc2020.out

8 2 6 16 1 4 64 

Explicație

Numerele date au divizori astfel: 30 are 8 divizori, 5 are 2 divizori, etc.

Cum e corect?

cout < "As la info"; cout << "As la info"; cout >> "As la info";

Felicitări! Poți mai mult?

Avem sute de probleme pentru tine, fiecare cu explicații ușor de înțeles.

Greșit, dar nu-i bai!

Antrenează-te cu sutele de probleme pe care ți le-am pregătit. Îți explicăm fiecare problemă în parte.

Rezolvare

Iată rezolvarea de 100 de puncte pentru problema joc2020:

#include <fstream>
using namespace std;
ifstream fin("joc2020.in");
ofstream fout("joc2020.out");

int D[1000002];
int E[1000002];
int main()
{
    int n,x;
    n=1000000;
    D[1]=1;
    for(int i=2;i<=n;i++)
    {
        D[i]=2;
        E[i]=1;
    }
    for(int i=2;i*i<=n;i++)
    {
        D[i*i]++;
        E[i*i]=0;
        for(int j=i+1;j*i<=n;j++)
        {
            D[i*j]=D[i*j]+2;
            E[i*j]=0;
        }
    }
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>x;
        fout<<D[x]<<" ";
    }
    return 0;
}

Atenție

Enunțurile afișate pe această pagină aparțin exclusiv site-ului PbInfo. Astfel, pentru ștergerea conținutului, puteți să ne contactați la adresa Adresa de email.

Rezolvarea problemei #3408 joc2020

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #3408 joc2020 de pe PbInfo.ro. Atenție: nu încurajăm copiatul codului! Totuși, credem cu tărie că analizarea unei soluții corecte este o metodă foarte ușoară de a învăța informatică, astfel că oferim sursele pentru peste 1500 de probleme de pe platforma PbInfo.ro.

Pentru rezolvări PbInfo de la peste 1500 de probleme, vă invităm să intrați pe site-ul nostru!