Sunteți pe pagina 1din 3

DIVIZIBILITATE.

NUMERE PRIME

De la matematică putem spune că un număr natural d este divizorul lui x, dacă și numai dacă,
restul împărțirii lui x la d este egal cu zero:
dacă x % d = 0 atunci
scrie d „îl divide pe” x
altfel
scrie d „nu îl divide pe ” x
sfârșit_dacă

Dacă d divide pe x, spunem că d este divizor al lui x, iar x este multiplu al lui d. Dacă vom nota
cu Dn mulțimea divizorilor numărului x, atunci pentru numărul x = 12 putem scrie:
D12={1, 2, 3, 4, 6, 12},
unde 1 și 12 se numesc divizori improprii ai lui x, iar 2, 3, 4, 6 sunt divizorii proprii ai numărului dat.

Algoritmul pentru determinarea(afișarea) divizorilor unui număr n dat, care respectă


definițiile de mai sus este:
1. citește numărul x (număr natural)
2. pentru fiecare posibil divizor d∈ [1, 𝑥/2] execută
dacă d este divizorul lui x atunci
afișează divizorul d
sfârșit_dacă
sfârșit_pentru
3. afișează și pe x pentru că și el însuși este divizor

Algoritmul de mai înainte este corect, dar neeficient. Testați-l pentru


n = 1.000.000.000
și veți vedea că execuția durează 2-3 secunde. Poate nu pare mult, dar dacă lucrăm cu 1000 de
numere cu valori în jurul lui 1.000.000.000, execuția poate dura aproximativ 45 de minute – prea
mult!
Soluția acceptabilă este să observăm că divizorii oricărui număr x sunt în pereche: dacă d este
divizor al lui x, atunci și x/d este divizor al lui x.
De exemplu, pentru n = 75 obținem:
● 5 este divizor 75, atunci și 75/5 =
● 1 este divizor 75, atunci și 75/1 =
15 este divizor al lui 75;
75 este divizor al lui 75;
● 6 nu este divizor al lui 75
● 2 nu este divizor al lui 75
● 7 nu este divizor al lui 75
● 3 este divizor 75, atunci și 75/3 =
● 8 nu este divizor al lui 75
25 este divizor al lui 75;
● 9 nu este divizor al lui 75. Mai mult, 9
● 4 nu este divizor al lui 75
* 9 > 75, alți divizori nu vom mai găsi

Deci divizorii lui 75 sunt: {1, 75, 3, 25, 5, 15}. Constatăm astfel că pentru a determina divizorii
lui x este suficient să parcurgem numerele de la 1 la [√𝑥]. Un caz special îl constituie pătratele
perfecte. În cazul lor trebuie evitată analizarea de două ori a lui x si [√𝑥] , care este divizor al lui x.
Pentru x=36 avem divizorii:
1. 1 în pereche cu 36
2. 2 în pereche cu 18
3. 3 în pereche cu 12
4. 4 în pereche cu 9
5. 5 nu este divizor al lui 36
6. 6 în pereche cu 6. Atenție! 6 trebuie luat o singură dată!
7.7*7>36, ne oprim!
Noua variantă a algoritmului care afișează divizorii lui x este:
Algoritm determinare divizori C++
citește x (număr natural) #include <iostream>
using namespace std;
pentru fiecare posibil divizor de la 1 la [√𝑥] execută int main()
dacă d este divizorul lui x atunci {int x;
afișează divizorul d cin>>x;
for(int d=1;d*d<=x; d++)
dacă d<[√𝑥] atunci //evităm afișare dublată a lui x, dacă x este
//pătrat perfect
if(x % d==0)
{cout<<d<<” ”;
afișează perechea divizorului d: x/d if(d*d<x)
sfârșit_dacă cout<<x/d<<” ”;
sfârșit_dacă }
return 0;
sfârșit_pentru }

Atenție! Pentru determinarea și prelucrarea divizorilor proprii ai unui număr este nevoie să
modificăm intervalul de căutare a posibililor divizori din interval închis [1, √𝑥] în intervalul [2, √𝑥],
fără a lua în considerare numărul însuși.

Algoritm determinare divizori proprii C++


citește x (număr natural) #include <iostream>
using namespace std;
pentru fiecare posibil divizor de la 2 la [√𝑥] execută int main()
dacă d este divizorul lui x atunci {int x;
afișează divizorul d cin>>x;
for(int d=2;d*d<=x; d++)
dacă d<[√𝑥] atunci //evităm afișare dublată a lui x, dacă x este
//pătrat perfect
if(x % d==0)
{cout<<d<<” ”;
afișează perechea divizorului d: x/d if(d*d<x)
sfârșit_dacă cout<<x/d<<” ”;
sfârșit_dacă }
return 0;
sfârșit_pentru }

Numere prime : un număr natural este prim dacă nu are nici un divizor propriu.
Programul este:
#include <iostream>
using namespace std;
int main()
{
int x, prim;
cin>>x;
if(x<2)
fout<<'0';
else
{ int d=2;
prim=1;
for(d=2;d*d<=;d++)
if(x % d==0)
prim=0;
cout<<prim;
}
return 0;
}
Relații matematice cu divizori:
● Numărul de numere <=n divizibile cu k este : nr_div_k = n/k
● Numărul de numere din [a, b], divizibile cu k este: nr_div_k = b/k – (a-1)/k
● Numărul de multipli de a și multipli de b din [1,n] = n/cmmmc(a, b)
● Numărul de multipli de a care nu sunt multipli de b din [1,n]este:
n/a-n/cmmmc(a, b)

Aplicații propuse:
Setul 1

1. Se citește de la tastatură un număr natural x. Se cere:


a. Sa se afișeze mulțimea divizorilor săi și numărul de elemente ale mulțimii.
b. Să se calculeze suma divizorilor unui număr
c. Să se afișeze mulțimea divizorilor proprii și numărul ei de elemente
d. Să se determine dacă este număr perfect(un număr este perfect dacă este egal cu
suma divizorilor săi mai mici decât el. Exemplu: nr x=6 este egal cu 1+2+3)
Setul 2

2. Se citește de la tastatură un număr natural n(n>0). Se cere:


a. Pentru numerele impare din intervalul [1,n] să se afișeze numărul divizorilor proprii
b. Calculați suma numerelor din interval care nu au divizori proprii
c. Afișați doar numerele care au exact k divizori proprii. (k număr natural citit de la
tastatură)
d. Afișați în ordine descrescătoare numere prime din intervalul dat. Câte numere ați
afișat?
e. Afișați toate perechile de numere prime gemene din intervalul dat. Câte perechi ați
afișat?(două numere naturale x și y formează o pereche de numere prime gemene
dacă amândouă sunt numere prime și diferența dintre ele este 2)
Exemplu: dacă n=20 atunci se vor afișa perechile (3, 5), (5, 7), (11, 13), (17, 19)
f. Afișați cel mai mare număr prim strict mai mic decât n.
g. Afișați cel mai mic număr prim strict mai mare decât n.
h. Afișați primele n numere prime. Exemplu: dacă n=10 atunci primele 10 numere prime
sunt 2,3,5,7,11,13,17,19, 23,29.

Rezolvați următoarele probleme de pe site-ul pbinfo.ro


#376, #387, #388, #1568, #389
Tema acasă:
#408, #64, #1574, #45, #375 și problemele rămase nerezolvate din fisă

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