Documente Academic
Documente Profesional
Documente Cultură
Algoritmi Elementari PDF
Algoritmi Elementari PDF
Pas 1
Pas 2
Pas 3
Pas 4
Pas 5
Pas 6
Exemplu
n=125346
c=6, n=12534
c=4, n=1253
c=3, n=125
c=5, n=12
c=2, n=1
c=1, n=0
Ct timp n0 execut
cn%10
n[n/10]
<prelucreaz c>
Observaii
Se observ c, pentru obinerea tuturor cifrelor, se execut un numr de 6
pai, deoarece numrul natural n este format din 6 cifre.
Cifrele numrului pot fi extrase de la dreapta la stnga, prin mpriri la 10.
Ultima cifr este restul mpririi numrului n la 10 i se poate obine dup
formula c=n%10.
Dup obinerea ultimei cifre, aceasta se taie din numr, numrul
actualizndu-se dup formula n=[n/10], adic ctul mpririi lui n la 10.
Dup obinerea tuturor cifrelor, n devine 0.
Algoritmul n pseudocod
repet
cn%10
n[n/10]
<prelucreaz c>
pn cnd n=0;
Pas 1
Pas 2
Pas 3
Pas 4
Pas 5
Pas 6
Exemplu
n=125346, S=0
c=6, n=12534, S=0+6=6
c=4, n=1253, S=6+4=10
c=3, n=125, S=10+3=13
c=5, n=12, S=13+5=18
c=2, n=1, S=18+2=20
c=1, n=0, S=20+1=21
S0
ct timp n0 execut
cn%10
n[n/10]
SS+c
Observaii
Folosind algoritmul de descompunere n cifre, prelucrarea
cifrei c const n adugarea ei la suma S a cifrelor lui n.
Iniial S=0, deoarece 0 este elementul neutru la adunare.
Actualizarea lui S este: S=S+c S=S+n%10
Algoritmul n pseudocod
S0
repet
cn%10
n[n/10]
SS+c
pn cnd n=0;
Divizibilitate: x este divizibil cu y dac restul mpririi lui x la y este 0, adic x%y=0
Divizorii unui numr
m=12
1 2 3 4 6 12 toi divizorii
numrului 12
1 i 12 se numesc divizori
improprii
2 3 4 6 divizori proprii
citete m
pentru d2,[m/2] execut,
dac m%d=0 atunci
<prelucreaz d>
m=35
1 5 7 35
Observaii
Toi divizorii numrului se gsesc n intervalul
[1,12], pentru m=12, pe caz general [1,m]
1, 35 divizori improprii
5, 7 divizori proprii
dd+1
pn cnd d>[m/2]
Testare primalitate: un numr x este prim dac are ca divizori doar pe 1 i el nsui, deci nu are divizori proprii, are
doar divizori improprii.
x=15
1, 3, 5, 15 divizorii lui 15
Nu este numr prim
deoarece are divizori proprii
citete x
prim1
pentru d2,[x/2] execut,
dac x%d=0 atunci
prim0
dac prim=1 atunci
scrie numr prim
altfel
scrie nu este numr prim
x=17
1, 17 divizorii lui 17
Este numr prim deoarece nu are
dect divizori improprii
Observaii
Pentru a verifica dac un numr este prim,
demonstrm prin reducere la absurd:
- presupunem c x este numr prim i
demonstrm contrariul
- cutm divizori proprii
dac se gsete un astfel de
divizor, presupunerea devine
fals
Algoritmul n pseudocod primalitatea unui numr
citete x
citete x
prim1
prim1
d2
d2
ct timp d[x/2] i prim=1 execut
repet
dac x%d=0 atunci
dac x%d=0 atunci
prim0
prim0
dd+1
dac prim=1 atunci
scrie numr prim
altfel
scrie nu este numr prim
dd+1
pn cnd d>[x/2] sau prim=0
dac prim=1 atunci
scrie numr prim
altfel
scrie nu este numr prim
n=150
n d
150 2
75 3
25 5
5
5
1
Observaii
Primul factor prim posibil este d2
Se descompune numrul n factori primi pn cnd
devine 1 sau ct timp este 1 (ct timp n1)
- Pentru fiecare factor prim d, se mparte numrul la d,
atta timp ct este posibil (ct timp n%d=0)
- Cnd n nu se mai mparte la d, se trece la urmtorul
factor prim (dd+1)
Algoritmul n pseudocod
d2
//primul factor prim posibil
d2
ct timp n1 execut
repet
p0
//puterea la care apare factorul prim
p0
ct timp n%d=0 execut //se mparte n la d ct timp este posibil
ct timp n%d=0 execut
pp+1
pp+1
n[n/d]
n[n/d]
dac p0 atunci
scrie d,
dd+1
n=28
n d
28 2
14 2
7 7
1
dac p0 atunci
scrie d,
dd+1
pn cnd n=1
a=2 *3
b=25
CMMDC a dou numere este cel mai mare numr
care le divide pe ambele.
cmmdc(12,32)=22=4
-comun la puterea cea mai mic
cmmmc(12,32)=25*3=96
- comun i necomun la puterea cea mai mare
cmmmc(12,32)=(12*32)/cmmdc(12,32)
OBSERVAIE:
n urma calcului cmmdc numerele se modific. Pentru a le folosi apoi trebuie s realizm o copie.
OBSERVAII:
a. n urma calcului cmmdc numerele se modific. Pentru a le folosi apoi trebuie s realizm o copie.
b. Algoritmul lui Euclid cu resturi este mai rapid dect algoritmul prin scderi repetate pentru c folosim
mprire.
citete n
pentru i1,n,1 execut
citete a
<prelucreaz a>
citete a,b
pentru ia,b,1 execut
copiai
<prelucreaz copia>
Algoritmul n pseudocod
citete a,b
ia
ct timp ib execut
copiai
<prelucreaz copia>
ii+1
citete a,b
pentru ib,a,-1 execut
copiai
<prelucreaz copia>