Informatică, întrebare adresată de eudanialex, 9 ani în urmă

Salut am nevoie de ajutor urgent la o problema:
Să se scrie un program care citeşte un număr natural n şi determină factorul care apare în descompunerea în factori primi a lui n la puterea cea mai mare.

Răspunsuri la întrebare

Răspuns de DanySonn
1
#include <iostream>
#include <cmath>

int main()
{
   int n, p_max, e_max = 0, sq;
   
   cin>>n;
   //Facem descompunerea cu 2 separat deoarece e singurul nr prim par
   if(n % 2== 0)
   {
       int e = 0;
       while(n % 2 == 0)
       {
           n /= 2;
           e++;
       }
       p_max = 2;
       e_max = e;
   }

   sq = sqrt(n);
   //Cum singurul numar prim par este 2, vom verifica numai numerele impare (i += 2)
   for(int d = 3; d <= sq; d += 2)
   {
       if(n % d == 0)
       {
           int e = 0;
           while(n % d == 0)
           {
               n /= d;
               e++;
           }
           if(e >= e_max)
           {
               e = e_max;
               p_max = d;
           }
           sq = sqrt(n);
       }
       cout<<p_max;
   }

//Prin functii
#include <iostream>
#include <cmath>

int descompunere(int & x, int d) /*Descompune numarul x dupa numarul prim d si     returneaza  exponentul lui d*/
{
   int e = 0;
   while(x % d == 0)
   {
       n /= d;
       e++; 
   }
   return e;
}

int main()
{
   int n, p_max, e_max = 0, sq, e;
   
   cin>>n;
   e = descompunere(n, 2);
   if(e)
   {
      p_max = 2;
      e_max = e; 
   }   

   sq = sqrt(n);
   //Cum singurul numar prim par este 2, vom verifica numai numerele impare (i += 2)
   for(int d = 3; d <= sq; d += 2)
   {
       e = descompunere(n, d);
       if(e)
       {
           if(e >= e_max)
           {
               e = e_max;
               p_max = d;
           }
           sq = sqrt(n);
       }
       cout<<p_max;
   }

eudanialex: as prefera ceva mai simplu
DanySonn: are vreo 35 de rânduri de cod,tu câte vrei încă?
Alte întrebări interesante