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

#include

using namespace std;
int n,i,x,nr,r,d,cmm,mini;
int main()
{
cin>>n;
cmm=1;
mini=99999;
for(i=1;i<=n;i++)
{
cin>>x;
r=x;
for(d=2;d*d<=x;d++)
{
if(r%d==0)
{
nr++;
while(r%d==0)
r=r/d;
}
}
if(nr>cmm)
{
cmm=nr;
if(x mini=x;

}
}cout< return 0;
}

Cerinţa
Să se scrie un program care citește un șir de n numere naturale şi determină numărul din şir care are număr maxim de factori primi.

Date de intrare
Programul citește de la tastatură numărul n, iar apoi n numere naturale nenule, separate prin spaţii.

Date de ieşire
Programul afișează pe ecran numărul x, numărul din şir cu număr maxim de factori primi.

Restricţii şi precizări
0 < n < 1001
cele n numere citite vor fi mai mici decât 2.000.000.000
dacă în şir există mai multe numere cu număr maxim de factori primi, se va fişa cel mic dintre acestea

Exemplu
Intrare

5
72 30 12 75 17
Ieșire

30
Explicație
30 are trei factori primi. Celelalte numere au mai puţini factori primi.

Ce am gresit?? Imi da 12 in loc de 30...


boiustef: de unde e problema ? pbinfo?, daca da scrie #
boiustef: e bn ca numele variabilei sa spuna despre rolul ei..., evita notatii de tipul cmm, altfel e greu sa intelegi logica
boiustef: te rog sa scrii nr sau denumirea problemei daca e de pe pbinfo. vreau s-o testez acolo. dar asa merge bine ...
boiustef: referitor la codul tau, nu am inteles logica... daca doresti o explici... si mai discutam

Răspunsuri la întrebare

Răspuns de boiustef
0

#include <iostream>

using namespace std;

bool prim(int n)

{

   if (n==0 || n==1) return false;

   if (n==2) return true;

   if (n>2)

   {

       if (n%2==0) return false;

       else

          {

              for (int i=3; i*i<=n; i+=2)

               if (n%i==0) return false;

          }

       return true;

   }

}

int nrDivPrimi(int m)

{

   int contor=0, j;

   for (j=1; j*j<m; ++j)

   {

       if (m%j==0)

           {

               if (prim(j)) ++contor;

               if (prim(m/j)) ++contor;

           }

   }

   if (j*j==m && prim(j)) ++contor;

   return contor;

}

int main()

{

   int n, i, num, nrdiv;

   cin >> n;

   cin >> num;

   int nrmax=nrDivPrimi(num);

   int x=num;

   for (i=2; i<=n; ++i)

   {

       cin >> num;

       nrdiv=nrDivPrimi(num);

       if (nrdiv>nrmax)

       {

           nrmax=nrdiv; x=num;

       }

       else

       {

           if (nrdiv==nrmax && num<x) x=num;

       }

   }

   cout << x;

   return 0;

}

Alte întrebări interesante