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

Buna!
Ma puteti ajuta va rog cu aceasta problema, de pe pbinfo?

#435 FactoriPrimi
Clasa a 9-a Algoritmi elementari Divizibilitate FactoriPrimi
Etichete: Descompunere in factori


Enunț
Blockly
Soluții
Cerinţa
Se dau două numere naturale nenule. Să se verifice dacă cele două numere au exact aceiași factor primi, indiferent de puterea acestora.

Date de intrare
Programul citește de la tastatură numerele n și m.

Date de ieşire
Programul afișează pe ecran mesajul DA, dacă cele două numere au exact aceiași factori primi, respectiv NU în caz contrar.

Restricţii şi precizări
cele două numere citite vor fi mai mici decât 2 30
Exemplu 1:
Intrare

72 48
Ieșire

DA
Explicație
72 și 48 au exact aceiași factori primi: 2 3.

Exemplu 2:
Intrare

72 30
Ieșire

NU
Explicație
Factorii primi ai lui 72 sunt 2 3, iar factorii primi ai lui 30 sunt 2 3 5.

Multumesc!

Răspunsuri la întrebare

Răspuns de boiustef
5

Răspuns:

#include <iostream>

using namespace std;

long long n,m,nr1=1,nr2=1;

int main()

{

   cin >> n >> m;

   long long d;

   d=2;

   while (d*d<=n)

   {

       int e=0;

       while (n%d==0)

       {

           n=n/d;

           ++e;

       }

       if (e>0) nr1=nr1*d;

       ++d;

   }

   if (n>1) nr1=nr1*n;

   d=2;

   while (d*d<=m)

   {

       int e=0;

       while (m%d==0)

       {

           m=m/d;

           ++e;

       }

       if (e>0) nr2=nr2*d;

       ++d;

   }

   if (m>1) nr2=nr2*m;

   if (nr1==nr2) cout << "DA";

   else cout << "NU";

}

Explicație:

creez două numere formate din produsul divizorilor primi a numerelor fără repetări.

nr1 pentru n,  nr2 pentru m.

dacă numerele formate astfel sunt egale, atunci OK...


boiustef: din start variabila divizor pornește cu valoarea 2, care este prim.
cât numărul se divide cu divizor, crește exponentul putere și numărul se divide la divizor.
boiustef: dacă număr=144, iar 144=16*9, adica 2^4 * 3^2
atunci număr se va împărți repetat de 4 ori la 2, astfel putere va fi 4, iar număr va deveni 9
boiustef: 9 la 2 nu se divide, atunci ai afișare și creșterea lui divizor
boiustef: număr mai mare ca 1, divizor devine 3, care la fel e prim și se repetă procedura.
boiustef: divizor va lua și valorile 4, dar număr nu se mai divide la 4, el s/a epuizat cu divizările la 2...
boiustef: astfel nimerim cu divizor numai la valorile prime...
boiustef: daca divizor ajunge să ia valoarea 6, dar 6=2*3, deci numărul deacum a fost împărțit la 2 și la 3, astfel numărul a fost micșorat și evident deacum el nu se va mai divide la 6
boiustef: iată din exemplul de mai sus cu număr=144. Acest număr se împarte și la 4 și la 6 ... dar cu împărțirile repetate la 2, numărul a devenit 9. Gata, el nu se va mai împărți la 4. Împărțind de 2 ori la 3, el devine 1 și Stop. nu ajungi să mai verifici diviyibilitatea cu 4, 6, 12, 24...
boiustef: sper că am fost explicit... succese la noi cercetări...
sikesjack1: Multumesc mult, foarte bune explicatii!
Alte întrebări interesante