Informatică, întrebare adresată de antic234, 8 ani în urmă

număr echilibrat

Definim un număr echilibrat ca având toţi factorii primi la aceaşi putere. Numerele prime sunt numere echilibrate.
Din fişierul de intrare se citesc numere naturale separate prin spaţiu. Să se determine numărul echilibrat cu cei mai mulţi factori primi la puterea cea mai mare. Dacă două numere echilibrate au acelaşi număr de factori primi, se alege cel pentru care puterea este mai mare.
Dacă există mai multe numere echilibrate cu acelaşi număr de factori şi aceaşi putere, se va afişa ultimul număr din fişier cu această proprietate.

Datele de intrare
Fişierul de intrare nrec.in conţine o singură linie pe care sunt scrise numerele, separate prin câte un spațiu.

Datele de ieşire
În fişierul nrec.out se vor afişa pe prima linie, separate prin câte un spaţiu:
• numărul cerut
• numărul de factori primi
• puterea


Restricţii şi precizări
• Numerele aparţin intervalulului [2,1000000000)
• În fişierul de intrare sunt cel mult 2500 numere.
• Există cel puţin un număr prim.


Exemplu
nrec.in
nrec.out
100 81 44 4356 17 28 900 37

900 3 2
Numărul maxim de factori primi este 3, iar puterea este 2
Există două numere cu această calitate: 4356 şi 900



44 18 24 37 28
37 1 1


Timp maxim de execuţie/test : 1 secundă
Limita de memorie: 5Mb din care 2Mb pentru stivă
Dimensiune maximă a sursei: 5KB.

Răspunsuri la întrebare

Răspuns de claudiunevrincean
0

Răspuns:

#include <fstream>

using namespace std;

int main()

{int nr,nfmax=0,nrd,p,pp,fact,nrmax,pmax;

  ifstream f("echilibrat.in");

  ofstream g("echilibrat.out");

  while(f>>nr)

  {int nf=0,aux=nr;

      fact=2;

      int ok=0,fan=1;

      while(nr>1&&fan==1)

      {

      if(nr%fact==0)

       {   p=0;

           while(nr%fact==0)

           {

          p++;

          nr=nr/fact;

           }

           nf++;

           if(ok==0)

               pp=p;

           else

           if(pp!=p)

           fan=0;

           if(nf>=1)

               ok=1;

       }

       fact++;

  }

  if(p==pp)

      {if(nfmax<nf)

          {nfmax=nf;

           nrmax=aux;

           pmax=pp;

          }

       if(nfmax==nf)

           if(pmax<pp)

           {pmax=pp;

           nrmax=aux;}

           if(nfmax==nf&&pmax==pp)

           {

               nrmax=aux;

           }

}}

g<<nrmax<<" "<<nfmax<<" "<<pmax;

}

Explicație:

Alte întrebări interesante
Matematică, 8 ani în urmă