Algoritmi elementari

October 4, 2017 | Author: anon_933693525 | Category: N/A
Share Embed Donate


Short Description

Download Algoritmi elementari...

Description

Prelucrarea cifrelor unui număr

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

Cât timp n≠0 execută cn%10 n[n/10]

Observații Se observă că, pentru obținerea tuturor cifrelor, se execută un număr de 6 pași, deoarece numărul natural n este format din 6 cifre. Cifrele numărului pot fi extrase de la dreapta la stânga, prin împărțiri la 10. Ultima cifră este restul împărțirii numărului n la 10 și se poate obține după formula c=n%10. După obținerea ultimei cifre, aceasta se taie din număr, numărul 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 repetă cn%10 n[n/10] până când n=0;

Suma cifrelor unui număr

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

S0 cât timp n≠0 execută cn%10 n[n/10] SS+c

Observații Folosind algoritmul de descompunere în cifre, prelucrarea cifrei c constă în adăugarea ei la suma S a cifrelor lui n. Inițial S=0, deoarece 0 este elementul neutru la adunare. Actualizarea lui S este: S=S+c ⟺ S=S+n%10

Algoritmul în pseudocod S0 repetă cn%10 n[n/10] SS+c până când n=0;

Oglinditul unui număr Exemplu Observații n=125346, og=0 Folosim algoritmul de descompunere în cifre. S- a observat că pentru obținerea cifrelor numărul se împarte la 10, atâta Pas 1 c=6, n=12534, og=6 timp cât mai are cifre. Pas 2 c=4, n=1253, og=6*10+4=64 Operația inversă, de construire a unui număr având cifrele la Pas 3 c=3, n=125, og=64*10+3=643 dispoziție, se va face prin operații de înmulțire cu 10. Pas 4 c=5, n=12, og=643*10+5=6435 Inițial 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 og0 og0 cât timp n≠0 execută repetă cn%10 cn%10 n[n/10] n[n/10] ogog*10+c ogog*10+c până când n=0; Palindrom: un număr natural egal cu oglinditul său n=135 , og=531 ⇒n nu este palindrom n=232, og=232 ⇒n este palindrom

Divizibilitate: x este divizibil cu y dacă restul împărțirii lui x la y este 0, adică x%y=0 Divizorii unui număr m=12 1 2 3 4 6 12 – toți divizorii numărului 12 1 și 12 se numesc divizori improprii 2 3 4 6 – divizori proprii

citește m pentru d2,[m/2] execută, dacă m%d=0 atunci

m=35 1 5 7 35

Observații Toți divizorii numărului se găsesc î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 jumătatea numărului. Deci, intervalul în care se caută divizorii proprii este [2, m/2]. Algoritmul în pseudocod – prelucrare divizori proprii citește m citește m d2 d2 cât timp d≤[m/2] execută repetă dacă m%d=0 atunci dacă m%d=0 atunci dd+1

dd+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. x=15 1, 3, 5, 15 – divizorii lui 15 Nu este număr prim deoarece are divizori proprii

citește x prim1 pentru d2,[x/2] execută, dacă x%d=0 atunci prim0 dacă prim=1 atunci scrie ”număr prim” altfel scrie ”nu este număr prim”

x=17 1, 17 – divizorii lui 17 Este număr prim deoarece nu are decât divizori improprii

Observații Pentru a verifica dacă un număr este prim, demonstrăm prin reducere la absurd: - presupunem că x este număr prim și demonstrăm contrariul - căutăm divizori proprii  dacă se găsește un astfel de divizor, presupunerea devine falsă Algoritmul în pseudocod – primalitatea unui număr citește x citește x prim1 prim1 d2 d2 cât timp d≤[x/2] și prim=1 execută repetă dacă x%d=0 atunci dacă x%d=0 atunci prim0 prim0 dd+1 dacă prim=1 atunci scrie ”număr prim” altfel scrie ”nu este număr prim”

dd+1 până când d>[x/2] sau prim=0 dacă prim=1 atunci scrie ”număr prim” altfel scrie ”nu este număr prim”

Descompunerea unui număr î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

Observații Primul factor prim posibil este d2 Se descompune numărul în factori primi până când devine 1 sau cât timp este ≠1 (cât timp n≠1) - Pentru fiecare factor prim d, se împarte numărul la d, atâta timp cât este posibil (cât timp n%d=0) - Când n nu se mai împarte la d, se trece la următorul factor prim (dd+1) Algoritmul în pseudocod d2 //primul factor prim posibil d2 cât timp n≠1 execută repetă p0 //puterea la care apare factorul prim p0 cât timp n%d=0 execută //se împarte n la d cât timp este posibil cât timp n%d=0 execută pp+1 pp+1 n[n/d] n[n/d] dacă p≠0 atunci scrie d,’ ‘ dd+1 ≠

n=28 n d 28 2 14 2 7 7 1

-

dacă p≠0 atunci scrie d,’ ‘ dd+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 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 î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 ra%b r12%32=12 cât timp r≠0 execută r≠0 (12≠0) Adevărat ab a32 br b12 ra%b r32%12=8 r≠0 (8≠0) Adevărat cmmdcb a12 scrie cmmdc b8 r12%8=4 r≠0 (4≠0) Adevărat a8 b4 r8%4=0 r≠0 (0≠0) Fals cmmdcb=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 aa-b b32-12=20 altfel 12≠20 Adevărat bb-a 12>20 Fals b20-12=8 cmmdca 12≠8 Adevărat scrie cmmdc 12>8 Adevărat a12-8=4 4≠8 Adevărat 4>8 Fals b8-4=4 4≠4 Fals cmmdc4

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 dacă a≠0 atunci citește a până când a=0 Citirea unui șir de n numere Algoritmul în pseudocod citește n pentru in,1,-1 execută citește a

citește n pentru i1,n,1 execută citește a

Prelucrarea numerelor dintr-un interval [a,b]

citește a,b pentru ia,b,1 execută copiai

Algoritmul în pseudocod citește a,b ia cât timp i≤b execută copiai ii+1

citește a,b pentru ib,a,-1 execută copiai

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF