Sunteți pe pagina 1din 4

algoritmi de divizibilitate

1. aflarea cmmdc dintre doua numere

a. prin scaderi repetate


b. prin impartiri repetate (alg lui Euclid)

a. prin scaderi repetate

- se compara cele doua numere si se scade cel mai mic din cel mai mare in mod
repetat pana cand numerele devi egale
-val comuna la care au ajuns este cmmdc

ex:a=72
b=60

a>b -->a=a-b=72-60=12
b=60
b>a -->b=b-a=60-12=48
a=12
b>a--> b=b-a=48-12=36
a=12
b>a -->b=b-a=36-12=24
a=12
b>a -->b=b-a=24-12=12
a=12
a=b -->stop -->cmmdc(72,60)=12

cin>>a>>b;
while(a!=b)
if(a>b)a=a-b;
else b=b-a;

cout<<a;

b. prin impartiri repetate

-se imparte a la b si se retine restul


-daca acesta este nenul se imparte b la rest si se retine noul rest
-alg continua pana obtinem restul 0
-ultimul rest nenul este cmmdc

r=72%60 =12
r=60%12 =0 -->stop -->cmmdc=12

cin>>a>>b;
do
{
r=a%b;
a=b;
b=r;
}
while(r!=0);
cout<<a;

2. verificarea daca un numar e prim


a. prin numararea divizorilor

- se parcurge intervalul [1,n] in care s-ar putea afla divizorii lui n si se numara
cati divizori sa gasesc in acest interval.
-daca n are 2 divizori, atunci e prim

cin>>n;
nr=0;
for(i=1;i<=n;i++)
if(n%i==0)
nr++;
if(nr==2)
cout<<n<<" e prim";
else
cout<<n<<" nu e prim";

b. prin numararea divizorilor proprii


-daca n nu are niciun divizor in intervalul [1,sqrt(n)] atunci e prim
-se vor trata separat cazurile n=0 si n=1

cin>>n;
if(n>=2)
{nr=0;
for(i=2;i*i<=n;i++)
if(n%i==0)
nr++;
if(nr==0)
cout<<n<<" e prim";
else
cout<<n<<" nu e prim";
}
else
cout<<n<<"nu e prim";

c. prin cautarea unui divizor propriu


-la intalnirea primului divizor propriu, cautarea divizorilor se opreste si se
afiseaza ca n nu e prim
- daca nu se intalneste niciun divizor, n e prim

cin>>n;
if(n>=2)
{nr=0;
for(i=2;i*i<=n&&nr==0;i++)
if(n%i==0)
nr==1
if(nr==0)
cout<<n<<" e prim";
else
cout<<n<<" nu e prim";
}
else
cout<<n<<"nu e prim";

3. descompunerea in factori primi

-se porneste de la primul divizor prim posibil (d=2)//1


-se imparte n la d cat timp se poate, numarand impartirile (p)//2
-daca impartirea s-a facut cel putin o data, se afiseaza factorul (d) si puterea
(p)//3
-se trece la urmatoarea valoare pentru d (d++) si reia rationamentul pana cand
n=1//4

cin>>n;
//1
d=2;
while(n!=1)
{//2
p=0;
while(n%d==0)
{n=n/d;
p++;}
//3
if(p!=0)
cout<<d<<" la puterea "<<p<<endl;
//4
d++;}

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