Sunteți pe pagina 1din 5

Prelucrarea cifrelor unui numr 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 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

Ct timp n0 execut cn%10 n[n/10] <prelucreaz c>

Suma cifrelor unui numr 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 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

Pas 1 Pas 2 Pas 3 Pas 4 Pas 5 Pas 6

S0 ct timp n0 execut cn%10 n[n/10] SS+c

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 m=35 1 5 7 35 1, 35 divizori improprii 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] 5, 7 divizori proprii Observaii Toi divizorii numrului se gsesc n intervalul [1,12], pentru m=12, pe caz general [1,m]

citete m pentru d2,[m/2] execut, dac m%d=0 atunci <prelucreaz d>

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 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

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

Descompunerea unui numr n factori primi n=12 n d 12 2 6 2 3 3 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 dac p0 atunci scrie d, dd+1 pn cnd n=1 n=150 n d 150 2 75 3 25 5 5 5 1 n=28 n d 28 2 14 2 7 7 1

CMMDC- cel mai mare divizor comun a=12, b=32 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
2

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] Algoritmul n pseudocod citete a,b ia ct timp ib execut copiai <prelucreaz copia> ii+1

citete a,b pentru ia,b,1 execut copiai <prelucreaz copia>

citete a,b pentru ib,a,-1 execut copiai <prelucreaz copia>