Documente Academic
Documente Profesional
Documente Cultură
GAL CARMEN
Contents
ALGORITMI PENTRU PRELUCRAREA DIVIZORILOR UNUI NUMĂR .............................................. 1
1. ALGORITMI PENTRU GENERAREA DIVIZORILOR UNUI NUMĂR ............................................ 1
2. AFIȘAREA DIVIZORILOR PARI/IMPARI AI UNUI NUMĂR ........................................................ 2
3. SUMĂ/PRODUS DIVIZORI.................................................................................................................... 4
4. NUMĂR PERFECT .................................................................................................................................. 4
5. NUMĂR DIVIZORI .................................................................................................................................. 5
6. ALGORITMUL PENTRU GENERAREA DIVIZORILOR PRIMI AI UNUI NUMĂR .................. 5
7. ALGORITMUL PENTRU DESCOMPUNEREA ÎN FACTORI PRIMI AI UNUI NUMĂR ......... 6
întreg n,d;
început
citește n;
scrie 1;
pentru d←2,n/2 execută
dacă n mod d=0 atunci scrie d,” “;
scrie n;
sfârșit
Sau se mai poate scrie și așa, dar este mai puțin eficient:
întreg n,d;
început
citește n;
pentru d←1,n execută
dacă n mod d=0 atunci scrie d,” “;
sfârșit
întreg n,d;
început
citește n;
pentru d←2,n/2,2 execută
dacă n mod d=0 atunci scrie d,” “;
dacă n mod 2=0 atunci
scrie n;
sfârșit
Dar, dacă se cereau cei impari?
Se citește n, număr natural. Se cere să se afișeze divizorii impari ai numărului:
Ce trebuia să modificăm la algoritm?
În primul rând 1 este divizor impar.
Știm că pentru un număr impar restul împărțirii la doi este diferit de zero. Și atunci condiția pe care o vom
pune va fi d mod 2<>0, respectiv n mod 2<>0
întreg n,d;
început
citește n; scrie 1,” “;
pentru d←3,n/2 execută
dacă n mod d=0 and d mod 2<>0 atunci scrie d,” “;
dacă n mod 2<>0 atunci
scrie n;
sfârșit
Sau dacă luăm doar divizorii impari ai numărului: 1,3,5,7,etc... adică divizorul d va lua valori din 2 în 2, dispare
condiția prin care testăm dacă este un divizor impar (mai puțin pentru n):
întreg n,d;
început
citește n; scrie 1,” “;
pentru d←3,n/,2 2 execută
dacă n mod d=0 atunci scrie d,” “;
dacă n mod 2<>0 atunci
scrie n;
sfârșit
Prof. GAL CARMEN
3. SUMĂ/PRODUS DIVIZORI
Se citește n, număr natural. Se cere să se afișeze suma, respectiv produsul divizorilor săi.
Algoritmul este foarte asemănător cu cel de la afișarea divizorilor, dar de data aceasta va trebui să adăugăm
divizorii la o sumă (care inițial este egală cu 1+n), respectiv să înmulțim la un produs (care inițial este egal cu n).
întreg n,d,s,p;
început
citește n;
s←1+n; p←n;
pentru d←2,n/2 execută
dacă n mod d=0 atunci
s←s+d;
p←p*d;
scrie s,” “,p;
sfârșit
O altă metodă de rezolvare, mai eficientă ar fi dacă am pleca de la următoarea observație:
Dacă d este un divizor al numărului n, înseamnă că și n/d este un divizor al numărului n.
De ex: n=18 divizorii sunt 1, 2, 3, 6, 9, 18. Inițial s=0,p=1
Observăm că dacă:
d=1 n/d=18/1=18 divizor s=s+d+n/d=0+1+18=19 p=p*d*n/d=1*1*18=18
d=2 n/d=18/2=9 divizori s=s+d+n/d=19+2+9=30 p=p*d=18*2*9=324
d=3 n/d=18/3=6 divizori s=s+d+n/d=30+3+6=39 p=p*d=324*3*6=5832
Și atunci ar trebui să luăm divizorii d←1, sqrt(n)-1 și dacă d este divizor, înseamnă că și n/d este divizor și îi
adăugăm la sumă, respectiv îi înmulțim la produs.
Obs: Există cazul particular în care numărul este pătrat perfect; ex. n=16 care are ca și divizori pe
1,2,4,8,16. De data aceasta dacă am gândi la fel înseamnă că pentru d=4, divizorul ar fi adăugat de două ori.
Și acest caz particular trebuie tratat separat
întreg n,d,s,p;
început
citește n;
s←0; p←1;
pentru d←1,sqrt(n)-1 execută
dacă n mod d=0 atunci
s←s+d+n div d;
p←p*d*(n div d);
dacă d=sqrt(n) atunci
s←s+d;
p←p*d;
scrie s,” “,p;
sfârșit
4. NUMĂR PERFECT
Se citește n, număr natural. Se cere să se verifice dacă numărul este perfect sau nu, afișându-se mesajul DA,
respectiv NU. Un număr se numește perfect dacă este egal cu suma tuturor divizorilor săi mai puțin
numărul însuși.
n=6=1+2+3 număr perfect
n=28=1+2+4+7+14 număr perfect
Practic, trebuie să determinăm o sumă a divizorilor pentru d=1,n/2, iar apoi să verificăm dacă suma
determinată este egală cu numărul înseamnă că numărul este perfet, altfel nu.
Prof. GAL CARMEN
întreg n,d,s,p;
început
citește n;
s←1;
pentru d←2,n/2 execută
dacă n mod d=0 atunci
s←s+d;
Primul factor prim de la care pornim este d=2. Cât timp se repetă?
Cât timp numărul este mai mare decât 1 executăm:
a) Initializăm puterea cu 0 pentru fiecare factor prim (p=0)
b) Cât timp numărul n se împarte exact la divizorul d (n mod d=0)
i. Împărțim numărul (n=n div d)
ii. Creștem puterea (p=p+1)
c) Dacă puterea este mai mare decât zero înseamnă că d este un divizor al lui n și atunci:
i. Afișăm factorul prim d și puterea la care apare
d) Se trece la următorul divizor posibil
întreg n,d,p;
început
citește n;
d←2;
cât timp n>1 execută
p←0;
cât timp n mod d=0 execută
n←n div d;
p←p+1;
dacă p>0 atunci
scrie d,”^”,p,”*”;
dacă d=2 atunci d←3;
altfel d←d+2;
sfârșit
Prof. GAL CARMEN
Intrare
1100
Ieșire
2 2 5 5 11
Numărul n=1100=2*2*5*5*11.