Sunteți pe pagina 1din 2

pt test .

Fisa de documentare

3. Algoritm număr prim


Un număr natural x este prim, dacă nu are nici un divizor propriu (adică
nici un divizor diferit de 1 şi el însuşi). Posibilii divizori proprii ai lui x se caută printre
numerele naturale până la jumătatea lui x (ne referim la împărţirea întreagă a lui x la 2,
adică x/2) . În concluzie, numerele printre care vom căuta divizorii lui x sunt 2,3,...,x/2.
Deoarece trebuie stabilit dacă este adevărată (îndeplinită) o anumită condiţie,
avem de-a face cu o testare logică. Este necesară o variabilă cu sens logic, adică o
variabilă care poate avea numai două valori, şi anume 1 şi 0, corespunzătoare celor două
„stări”logice posibile, ADEVĂRAT respectiv FALS. Valoarea finală a acestei variabile
va indica „starea” condiţiei testate: 1 dacă numărul x este prim (nu are divizori),
respectiv 0 în caz contrar. Denumim această variabilă ok.
Procedăm prin metoda reducerii la absurd. Presupunem iniţial că numărul x nu
are divizori, dând variabilei ok valoarea 1. Pentru a căuta divizorii folosim un ciclu
repetitiv (cu testare iniţială sau finală), în care variabila i va parcurge toţi posibilii
divizori ai lui x. Teoretic aceştia sunt 2, 3, ..., x/2, practic însă, este posibil ca prin
variabila i să nu treacă toate aceste valori, deoarece vom proiecta ciclul de aşa manieră,
încât în momentul în care am găsit o valoare a lui i care este efectiv divizor al lui x, să
se iasă din ciclu, abandonându-se căutarea (dacă numărul x are cel puţin un divizor, nu
mai poate fi prim).
Trebuie constatat că numerele pare nu sunt prime deoarece au cel puţin un
divizor (se împart exact la 2). Excepţie face numărul 2, care , chiar dacă este par, este
considerat număr prim. Aşadar se caută divizorii doar pentru numerele x impare. Dar
numerele impare nu pot avea divizori pari, deci ar fi util, ca dintre posibilii divizori ai
lui x să-i parcurgem în variabila i doar pe cei impari. Acest lucru îl putem face astfel:
iniţializă înaintea ciclului pe i cu valoarea 3 (primul posibil divizor impar), iar în ciclu,
la sfârşitul fiecărui pas trecem la următorul divizor impar prin atribuirea i←i+2.
Reprezentarea algoritmului in pseudocod: start
citeşte x;
dacă(x%2=0) atunci
dacă(x=2) atunci
ok←1; //este prim
altfel
ok←0; //nu este prim
altfel
i←3;
ok←1;
cât timp(i<=x/2 SI ok=1) executa
daca(x%i =0) atunci
ok←0;
i←i+2;
daca(ok=1) atunci
scrie „numarul este prim”;
altfel
scrie „numarul nu este prim”;
stop
4. Cel mai mare divizor comun
Algoritmul lui Euclid „clasic” pentru determinarea c.m.md.c a două numere naturale a
şi b se bazează pe o succesiune de împărţiri. Iniţial deîmpărţitul este a iar împărţitorul
este b. La fiecare împărţire se obţine un rest r, apoi, în mod repetat, împărţitorul devine
deîmpărţit pentru împărţirea următoare şi se împarte la restul r. Procesul se reia până
când obţinem restul 0, iar ultimul rest diferit de zero este cel mai mare divizor comun al
lui a şi b.
Reprezentarea algoritmului în pseudocod:
start
citeşte a, b; stop
r←a % b; Exemplu: Fie a=48 şi b=14
cât timp(r!=0) a←b;
b←r; 48:14=> restul 6; 14:6=> restul 2; 6:2 => restul 0
r←a % b;
c.m.m.dc(a,b)=2
scrie b;

Algoritmul lui Euclid cu diferenţe pentru determinarea c.m.md.c a două numere naturale a
şi b se bazează pe scăderi care se repetă într-un ciclu. La fiecare pas, se modifică prin aceste
scăderi, fie a,fie b. Dacă a>b se modifică a prin scăderea a←a-b, iar dacă a<b se modifică b
prin scăderea b←b-a. Când cele două numere a şi b au devenit egale se opreşte ciclul,
obţinându-se c.m.m.d.c. care este a (sau b). Deci ciclul se repetă cât timp a este diferit de b.
Obs: Algoritmul prezentat nu va funcţiona dacă cel puţin unul dintre numere este
negativ sau zero. Pentru a evita aceste două cazuri, poate fi pusă condiţia suplimentară
„(a>0) SI (b>0)”.

citeste a, b;
cat timp(a!=b) executa
daca (a>b)
atunci a←a-b
altfel b←b-a
scrie a
Exemplu: Fie a=15; b=6
Pas 1: a!=b ? 15!=6 ? da a>b ? 15>6 ? da=> a←a-b
=>a=15-6, a=9; Pas 2: a!=b ? 9!=6 ? da a>b ? 9>6 ?
da=> a←a-b =>a=9-6, a=3; Pas 3: a!=b ? 3!=6 ? da a>b
? 3>6 ? nu=> b←b-a =>b=6-3, b=3; Pas 4: a!=b ? 3!
=3 ? nu => iese din ciclu
c.m.m.d.c. (a,b) =a=b=3

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