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

Cerinţa
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.

Date de intrare
Programul citește de la tastatură numărul n.

Date de ieşire
Programul afișează pe ecran numărul prim p, cu semnificaţia precizată.

Restricţii şi precizări
1 < n < 2.100.000.000
dacă în descompunerea în factori primi a lui n apar mai mulţi factori la puterea maximă, se va afişa cel mai mare dintre ei

Exemplu
Intrare

405
Ieșire

3

Răspunsuri la întrebare

Răspuns de vic2002
0
#include <iostream>
#include <cmath>
using namespace std;
int n,i,j,o,c,d=0;
long pr,b[55],s;
long long int x;
void pf(long long int n)
{
    o=0;c=1;pr=1;
    while (n%2==0)
    {
        o++;
        b[o]=2;
        n/=2;
    }
    for (i=3;i<=sqrt(n);i+=2)
    {
        while (n%i==0)
        {
            o++;
            b[o]=i;
            n/=i;
        }
    }
    if (n>2)
    {
        o++;
        b[o]=n;
    }
    for(i=1;i<=o;i++)
    {
        if(b[i]==b[i+1])c++;
        else
        {
          if(d<c)
          {
              d=c;
              s=b[i];
          }
          c=1;   
        }
    }
    cout<<s;
   
}
int main()
{
  cin>>n;
  pf(n);
  return 0;
}


vic2002: Am folosit factorizarea prima, apoi toti facotrii i-am salvat intr-un array, am vazut de cite ori se repeta fiecare si acel care se repeta de cele mai multe ori l-am printat.
Răspuns de express
2
#include <iostream>
using namespace std;
long long n,d,fm, fact,maxx;
int main()
{
    cin>>n;
    d=2;
    do
    {
        fm=0;
        while(n%d==0)
        {
            fm++;
            n=n/d;
        }
        if((fm>0)&&(fm >= maxx)) maxx = fm, fact = d;
        d++;
        if((n>1)&&(d*d>n)) if(maxx > 1)  n = 1;
                          else fact = n, n = 1;
    } while(n>1);
    cout << fact;
    return 0;
}


express: Eu am o solutie fara vectori...sper sa-ti placa! Succes!
Alte întrebări interesante