Documente Academic
Documente Profesional
Documente Cultură
Algoritmi Elementari
Algoritmi Elementari
Exemplu Observații
n=125346 Se observă că, pentru obținerea tuturor cifrelor, se execută un număr de 6
Pas 1 c=6, n=12534 pași, deoarece numărul natural n este format din 6 cifre.
Pas 2 c=4, n=1253 Cifrele numărului pot fi extrase de la dreapta la stânga, prin împărțiri la 10.
Pas 3 c=3, n=125 Ultima cifră este restul împărțirii numărului n la 10 și se poate obține după
Pas 4 c=5, n=12 formula c=n%10.
Pas 5 c=2, n=1 După obținerea ultimei cifre, aceasta se taie din număr, numărul
Pas 6 c=1, n=0 actualizându-se după formula n=[n/10], adică câtul împărțirii lui n la 10.
După obținerea tuturor cifrelor, n devine 0.
Algoritmul în pseudocod
Cât timp n≠0 execută repetă
cn%10 cn%10
n[n/10] n[n/10]
<prelucrează c> <prelucrează c>
până când n=0;
Exemplu Observații
n=125346, S=0 Folosind algoritmul de descompunere în cifre, prelucrarea
Pas 1 c=6, n=12534, S=0+6=6 cifrei c constă în adăugarea ei la suma S a cifrelor lui n.
Pas 2 c=4, n=1253, S=6+4=10 Inițial S=0, deoarece 0 este elementul neutru la adunare.
Pas 3 c=3, n=125, S=10+3=13 Actualizarea lui S este: S=S+c ⟺ S=S+n%10
Pas 4 c=5, n=12, S=13+5=18
Pas 5 c=2, n=1, S=18+2=20
Pas 6 c=1, n=0, S=20+1=21
Algoritmul în pseudocod
S0 S0
cât timp n≠0 execută repetă
cn%10 cn%10
n[n/10] n[n/10]
SS+c SS+c
până când n=0;
Exemplu Observații
n=125346, og=0 Folosim algoritmul de descompunere în cifre. S- a observat
Pas 1 c=6, n=12534, og=6 că pentru obținerea cifrelor numărul se împarte la 10, atâta
Pas 2 c=4, n=1253, og=6*10+4=64 timp cât mai are cifre.
Pas 3 c=3, n=125, og=64*10+3=643 Operația inversă, de construire a unui număr având cifrele la
Pas 4 c=5, n=12, og=643*10+5=6435 dispoziție, se va face prin operații de înmulțire cu 10.
Pas 5 c=2, n=1, og=6435*10+2=64352 Inițial og=0, deoarece oglinditul nu a fost construit.
Pas 6 c=1, n=0, og=64352*10+1=643521 Actualizarea lui og este: og=og*10+c ⟺ og=og*10+n%10
Algoritmul în pseudocod
og0 og0
cât timp n≠0 execută repetă
cn%10 cn%10
n[n/10] n[n/10]
ogog*10+c ogog*10+c
până când n=0;
dd+1 dd+1
până când d>[m/2]
Testare primalitate: un număr x este prim dacă are ca divizori doar pe 1 și el însuși, deci nu are divizori proprii, are
doar divizori improprii.
dd+1 dd+1
≠ ≠ până când n=1
CMMDC- cel mai mare divizor comun
a=12, b=32
2
a=2 *3
b=25
CMMDC a două numere este cel mai mare număr cmmmc(12,32)=25*3=96
care le divide pe ambele. - comun și necomun la puterea cea mai mare
cmmdc(12,32)=22=4 cmmmc(12,32)=(12*32)/cmmdc(12,32)
-comun la puterea cea mai mică
Fie a si b doua numere întregi, unde |a| > |b| sau |a| = |b|, b nenul.
1) Se împarte |a| la |b|; dacă restul împărţirii este 0, atunci b este un c.m.m.d.c. ;
2) Dacă restul împărţirii este nenul, se împarte |b| la primul rest (restul împărţirii de
mai sus) şi obţinem al doilea rest;
3) Împărţim, apoi, primul rest la al doilea şi obținem un nou rest (al treilea) şi aşa mai
departe;
4) Ultimul rest nenul este c.m.m.d.c. al celor 2 numere.
Observaţii:
a) Dacă ultimul rest nenul este 1, atunci numerele sunt prime între ele;
Dacă CMMDC(a, b) = 1, atunci a și b sunt prime între ele. Această proprietate nu depinde de primalitatea lui a și a lui
b. De exemplu, numerele 6 și 35 nu sunt numere prime, deoarece ambele au doi factori: 6 = 2 × 3 și 35 = 5 × 7. Cu
toate acestea, 6 și 35 sunt prime între ele. Niciun alt număr natural în afară de 1 nu divide și pe 6 și pe 35, deoarece
ele nu au niciun factor prim în comun.
b) Algoritmul lui Euclid se poate folosi şi pentru aflarea c.m.m.d.c. al mai multor numere, de pilda a,b,c.
Se calculează mai întâi (a,b) = d, apoi (c,d) = e.
CMMDC(a, b, c) = CMMDC(a, CMMDC(b, c)) = CMMDC(CMMDC(a, b), c) = CMMDC(CMMDC(a, c), b).
Algoritmul în pseudocod Exemplu
citeste a,b a=12, b=32 cmmdc(12,32)=4
ra%b r12%32=12
cât timp r≠0 execută r≠0 (12≠0) Adevărat
ab a32
br b12
ra%b r32%12=8
r≠0 (8≠0) Adevărat
cmmdcb a12
scrie cmmdc b8
r12%8=4
r≠0 (4≠0) Adevărat
a8
b4
r8%4=0
r≠0 (0≠0) Fals
cmmdcb=4
OBSERVAȚIE:
În urma calcului cmmdc numerele se modifică. Pentru a le folosi apoi trebuie să realizăm o copie.
Cmmdc – Algoritmul lui Euclid, cu diferențe
𝑎, 𝑑𝑎𝑐ă 𝑎 = 𝑏
cmmdc(a,b)= 𝑐𝑚𝑚𝑑𝑐 𝑎 − 𝑏, 𝑏 , 𝑑𝑎𝑐ă 𝑎 > 𝑏
𝑐𝑚𝑚𝑑𝑐 𝑎, 𝑏 − 𝑎 , 𝑑𝑎𝑐ă 𝑏 > 𝑎
Algoritmul în pseudocod Exemplu
citește a,b a=12, b=32 cmmdc(12,32)=4
cât timp a≠b execută 12≠32 Adevărat
dacă a>b atunci 12>32 Fals
aa-b b32-12=20
altfel 12≠20 Adevărat
bb-a 12>20 Fals
b20-12=8
cmmdca 12≠8 Adevărat
scrie cmmdc 12>8 Adevărat
a12-8=4
4≠8 Adevărat
4>8 Fals
b8-4=4
4≠4 Fals
cmmdc4
OBSERVAȚII:
a. În urma calcului cmmdc numerele se modifică. Pentru a le folosi apoi trebuie să realizăm o copie.
b. Algoritmul lui Euclid cu resturi este mai rapid decât algoritmul prin scăderi repetate pentru că folosim
împărțire.
Citirea unui șir de numere până la întâlnirea valorii 0, care nu face parte din șir
Algoritmul în pseudocod
citeste a repetă
cât timp a execută citește a
<prelucrează a> dacă a≠0 atunci
citește a <prelucrează a>
Algoritmul în pseudocod
citește n citește n
pentru i1,n,1 execută pentru in,1,-1 execută
citește a citește a
<prelucrează a> <prelucrează a>
Algoritmul în pseudocod
citește a,b citește a,b citește a,b
pentru ia,b,1 execută ia pentru ib,a,-1 execută
copiai cât timp i≤b execută copiai
<prelucrează copia> copiai <prelucrează copia>
<prelucrează copia>
ii+1