Rezolvare completă PbInfo #2345 magic3

În ajunul Crăciunului la marele mall din Acropole s-a organizat o tombolă la care au participat n persoane. Acestea au extras pe rând câte un număr, iar câștigători au fost cei care au extras numerele magice. Un număr este magic dacă numărul său de divizori este minim.

Cerința

Câți câștigatori au existat?

Date de intrare

Fişierul de intrare magic3.in conţine pe prima linie variabila n cu indicația din enunț, iar pe a doua linie cele n numere naturale v[1],v[2],...,v[n] , separate prin câte un spațiu, reprezentând numerele extrase la tombolă.

Date de ieșire

Fişierul de ieşire magic3.out conţine o singură valoare care reprezintă numărul de câștigatori.

Restricții și precizări

  • 1 ≤ n ≤ 1.000
  • 0 < v[i] ≤ 1.000.000.000
  • Numerele se pot repeta în această tombolă

Exemplu

magic3.in

8 
12 5 10 7 32 2 4 99

magic3.out

3

Explicație

Numărul minim de divizori este 2. Și avem 3 numere care au doar 2 divizori.

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 magic3:

/*
    Implementare: Catalin Puricoi
*/
#include <fstream>
#define inf 1000000000
using namespace std;
ifstream f("magic3.in");
ofstream g("magic3.out");
int x,i,j,nr,n,min1,ok;
int main()
{
        f>>n;
        min1=inf;
        for(i=1;i<=n;i++)
        {
            ok=0;
            f>>x;
            if(x==1) // cazul in care avem numarul 1 in sir(numarul divizori mereu va fi minim pt acest numar adica 1 div)
                ok=1;
            else
            {
            for(j=1;j*j<x;j++) //verific numarul de div. pana la radical pt 100 puncte, pana la jumatate pentru 80, pana la n pt 70
                if(x%j==0)
                    ok=ok+2;
            if(j*j==x) // cazul in care numarul este patrat perfect
                ok++;
            }
            if(ok<min1) // daca gasesc un nou minim il retin
                {
                    min1=ok;
                    nr=0;
                }
            if(min1==ok) // daca numarul de div este egal cu minim il numar
                nr++;
        }
        g<<nr;
    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 #2345 magic3

Pe această pagină găsești rezolvarea de 100 de puncte pentru problema #2345 magic3 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!