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
Explicație
405 = 3 4 * 5 1 . Astfel, factorul care apare la puterea cea mai mare este 3
uleiaalex:
Data viitoare sa pui mai putine puncte deoarece e prea ez problema pentru atatea puncte. Multumesc :-*
Răspunsuri la întrebare
Răspuns de
3
#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;
}
#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;
}
Răspuns de
2
Am facut in pascal, doar cateva linii de cod si gata problema :D. Am facut cu functie.
Problema si in C++
#invclude <iostream>
using namespace std;
int BigFactPrimi(int x);
{
int max=0;
for (int i:=2;i<=n div 2;i++)
{
nr=0;
while (x % i = 0)
{
nr++;
x:=x div i;
}
if (nr>max)
{
varnum=i;
max=nr;
}
}
return varnum;
}
int main()
{
int n;
cin>>n;
cout<<BigFactPrimi(n);
return 0;
}
Problema si in C++
#invclude <iostream>
using namespace std;
int BigFactPrimi(int x);
{
int max=0;
for (int i:=2;i<=n div 2;i++)
{
nr=0;
while (x % i = 0)
{
nr++;
x:=x div i;
}
if (nr>max)
{
varnum=i;
max=nr;
}
}
return varnum;
}
int main()
{
int n;
cin>>n;
cout<<BigFactPrimi(n);
return 0;
}
Anexe:
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Limba română,
9 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă