Sunteți pe pagina 1din 5

Prelucrarea cifrelor unui numr

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;

Suma cifrelor unui numr

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;

Oglinditul unui numr


Exemplu
Observaii
n=125346, og=0
Folosim algoritmul de descompunere n cifre. S- a observat
c pentru obinerea cifrelor numrul se mparte la 10, atta
Pas 1
c=6, n=12534, og=6
timp ct mai are cifre.
Pas 2
c=4, n=1253, og=6*10+4=64
Operaia invers, de construire a unui numr avnd cifrele la
Pas 3
c=3, n=125, og=64*10+3=643
dispoziie, se va face prin operaii de nmulire cu 10.
Pas 4
c=5, n=12, og=643*10+5=6435
Iniial og=0, deoarece oglinditul nu a fost construit.
Pas 5
c=2, n=1, og=6435*10+2=64352
Actualizarea lui og este: og=og*10+c og=og*10+n%10
Pas 6
c=1, n=0, og=64352*10+1=643521
Algoritmul n pseudocod
og0
og0
ct timp n0 execut
repet
cn%10
cn%10
n[n/10]
n[n/10]
ogog*10+c
ogog*10+c
pn cnd n=0;
Palindrom: un numr natural egal cu oglinditul su
n=135 , og=531 n nu este palindrom
n=232, og=232 n este palindrom

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

Se observ c cel mai mic divizor propriu poate fi 2,


iar cel mai mare divizor propriu poate fi cel mult
jumtatea numrului.
Deci, intervalul n care se caut divizorii proprii este
[2, m/2].
Algoritmul n pseudocod prelucrare divizori proprii
citete m
citete m
d2
d2
ct timp d[m/2] execut
repet
dac m%d=0 atunci
dac m%d=0 atunci
<prelucreaz d>
<prelucreaz d>
dd+1

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

Descompunerea unui numr n factori primi


n=12
n d
12 2
6 2
3 3
1

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

CMMDC- cel mai mare divizor comun


a=12, b=32
2

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)

Cmmdc Algoritmul lui Euclid, cu resturi


Fie a si b doua numere ntregi, unde |a| > |b| sau |a| = |b|, b nenul.
1) Se mparte |a| la |b|; dac restul mpririi este 0, atunci b este un c.m.m.d.c. ;
2) Dac restul mpririi este nenul, se mparte |b| la primul rest (restul mpririi de
mai sus) i obinem al doilea rest;
3) mprim, apoi, primul rest la al doilea i obinem un nou rest (al treilea) i aa mai
departe;
4) Ultimul rest nenul este c.m.m.d.c. al celor 2 numere.
Observaii:
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 numr 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 nti (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
ct timp r0 execut
r0 (120) Adevrat
ab
a32
br
b12
ra%b
r32%12=8
r0 (80) Adevrat
cmmdcb
a12
scrie cmmdc
b8
r12%8=4
r0 (40) Adevrat
a8
b4
r8%4=0
r0 (00) Fals
cmmdcb=4

OBSERVAIE:
n urma calcului cmmdc numerele se modific. Pentru a le folosi apoi trebuie s realizm o copie.

Cmmdc Algoritmul lui Euclid, cu diferene


, =
cmmdc(a,b)= , , >
, , >
Algoritmul n pseudocod
Exemplu
citete a,b
a=12, b=32 cmmdc(12,32)=4
ct timp ab execut
1232 Adevrat
dac a>b atunci
12>32 Fals
aa-b
b32-12=20
altfel
1220 Adevrat
bb-a
12>20 Fals
b20-12=8
cmmdca
128 Adevrat
scrie cmmdc
12>8 Adevrat
a12-8=4
48 Adevrat
4>8 Fals
b8-4=4
44 Fals
cmmdc4

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.

Citirea unui ir de numere pn la ntlnirea valorii 0, care nu face parte din ir


Algoritmul n pseudocod
citeste a
repet
ct timp a execut
citete a
<prelucreaz a>
dac a0 atunci
citete a
<prelucreaz a>
pn cnd a=0
Citirea unui ir de n numere
Algoritmul n pseudocod
citete n
pentru in,1,-1 execut
citete a
<prelucreaz a>

citete n
pentru i1,n,1 execut
citete a
<prelucreaz a>

Prelucrarea numerelor dintr-un interval [a,b]

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>

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