Sunteți pe pagina 1din 3

Algoritmi fundamentali în C++: descompunerea unui număr natural in factori

primi

 
Principiul dupa care functioneaza algoritmul este de a cauta crescator(incepand de la cel mai
mic) factorii primi, si a diviza numarul pana la ireductibilitate cu factorul respectiv, rezultand
astfel ca divizori doar factorii primi
d=2; //se porneste de la cel mai mic factor prim posibil
while(n>1) //n se va divide pana devine 1
{
k=0;
while(n%d==0)
{
n=n/d;
k++; //numaram divizarile numarului n cu d
}
if(k>0) //d este factor prim si apare la puterea k
d++;
}

Exemplu de execuție pas cu pas:

n=72

d=2 d=3 d=4


72>1(A) 9>1(A) 1>1(F)
k=0; k=0; Se termina repetarea
72%2==0(A) 9%3==0(A) initiala
n=72/2=36 n=9/3=3
k=1; k=1;
36%2==0(A) 3%3==0(A)
n=36/2=18 n=3/3=1
k=2; k=2;
18%2==0(A) 1%3==0(F)
n=18/2=9 2>0(A) deci factorul 3
k=3; apare la puterea 2
9%2==0(F)
3>0(A) deci factorul 2 apare la puterea 3

Exemple clasice de aplicații

——————————————————————————-
// Descompunerea in factori primi si puterea la care apar acestia
 
#include<iostream>
using namespace std;
int main()
{
int d,n,k;
cout<<"n=";
cin>>n;
d=2;
while(n>1)
{
k=0;
while(n%d==0)
{
n=n/d;
k++;
}
if(k>0) cout<<d<<" "<<k<<endl;
d++;
}
return 0;
}

Ex. pt n=72, se va afisa


23
32
——————————————————————————-
// Afisarea celui mai mic factor prim care apare la puterea cea mai mare

#include<iostream>
using namespace std;
int main()
{
int d,n,k,m,f;
cout<<"n=";
cin>>n;
d=2;
m=0;
f=0;
while(n>1)
{
k=0;
while(n%d==0)
{
n=n/d;
k++;
}
if(k>0&&k>m) //daca puterea este mai mare ca maximul intermediar
{
m=k;//se schimba maximul
f=d;//se retine noul factor
}
d++;
}
cout<<"factorul la puterea cea mai mare este "<<f;
return 0;
}

Ex. pt n=72, se va afisa 2

S-ar putea să vă placă și