Python clasa a 9-a · Manual Python
Laborator Python
LECȚIE · CAPITOLUL 2

2.2. Divizibilitate, divizori și numere prime

Parcurgerea divizorilor, numere perfecte și descompunerea în factori primi.

DIVIZIBILITATE
→
DIVIZORI
→
PRIMALITATE
→
FACTORIZARE
→
TESTARE
01
OBIECTIVE

La finalul lecției vei putea...

01

Divizibilitate

Explici relația de divizibilitate și noțiunea de divizor.

02

Divizori

Determini divizorii prin parcurgere directă și prin perechi până la √n.

03

Primalitate

Stabilești dacă un număr este prim sau compus.

04

Factori primi

Realizezi descompunerea în factori primi și compari eficiența soluțiilor.

✓
Checkpoint

Dacă d divide n, ce alt divizor obținem automat?

02
EXPLICAȚIE

Divizori, perechi și numere prime

2.1. Divizibilitatea

Spunem că un număr natural a este divizibil cu un număr natural nenul b dacă împărțirea lui a la b are restul 0. Notăm b | a și spunem că b este divizor al lui a.

De exemplu, 4 | 20 deoarece 20 = 4 · 5. În schimb, 6 ∤ 20 deoarece 20 = 6 · 3 + 2.

2.2. Parcurgerea divizorilor

Metoda directă verifică valorile 1,2,...,n. Metoda mai eficientă folosește perechile: dacă d | n, atunci n // d | n. Pentru 36 apar perechile (1,36), (2,18), (3,12), (4,9), (6,6), deci este suficient să verificăm candidații până la √n.

2.3. Numere prime

Un număr natural n > 1 este prim dacă are exact doi divizori pozitivi: 1 și n. Un număr mai mare decât 1 care nu este prim este compus.

2.4. Numere perfecte

Un număr este perfect dacă este egal cu suma divizorilor săi proprii. Exemple clasice sunt 6 și 28.

2.5. Descompunerea în factori primi

Descompunerea exprimă numărul ca produs de numere prime. De exemplu, 84 = 2 · 2 · 3 · 7 = 2² · 3 · 7.

03
EXEMPLU INTUITIV

24 de obiecte și rânduri egale

24 de obiecte pot fi aranjate în rânduri cu 1, 2, 3, 4, 6, 8, 12 sau 24 obiecte pe rând. Aceste valori sunt divizorii lui 24.

Dacă descoperim perechea 3 × 8, nu mai trebuie să căutăm separat 8. Acesta este motivul pentru care metoda până la √n este mai eficientă.

Activitate: găsește perechea

Pentru n = 36, dacă d = 4, care este divizorul asociat?

04
PYTHON

De la verificarea unui divizor la factorizare

Divizorii prin √n

from math import isqrt
n = 36
divizori = []
for d in range(1, isqrt(n) + 1):
    if n % d == 0:
        divizori.append(d)
        if d != n // d:
            divizori.append(n // d)
divizori.sort()
print(divizori)

Testarea primalității

from math import isqrt
n = 97
prim = n > 1
for d in range(2, isqrt(n) + 1):
    if n % d == 0:
        prim = False
        break
print(prim)

Descompunerea în factori primi

n = 84
factori = []
d = 2
while d * d <= n:
    while n % d == 0:
        factori.append(d)
        n //= d
    d += 1
if n > 1:
    factori.append(n)
print(factori)

Rezultatul este [2, 2, 3, 7], adică 84 = 2² · 3 · 7.

05
ALGORITM / PSEUDOCOD

Modele fundamentale

Divizorii folosind √n

citește n
pentru d 1, √n execută
    dacă n mod d = 0 atunci
        scrie d
        dacă d ≠ n div d atunci
            scrie n div d
        sfârșit dacă
    sfârșit dacă
sfârșit pentru

Testarea primalității

citește n
prim ← n > 1
pentru d 2, √n execută
    dacă n mod d = 0 atunci
        prim ← FALS
        oprește parcurgerea
    sfârșit dacă
sfârșit pentru
scrie prim

Factori primi

citește n
m ← n
d ← 2
cât timp d · d ≤ m execută
    cât timp m mod d = 0 execută
        scrie d
        m ← m div d
    sfârșit cât timp
    d ← d + 1
sfârșit cât timp
dacă m > 1 atunci scrie m
06
ATENȚIE!

Capcane și cazuri-limită

1 nu este prim

Are un singur divizor pozitiv.

√n este suficient

Dacă există un divizor propriu mai mare decât √n, există unul asociat mai mic decât √n.

Pătrate perfecte

Pentru d = n // d nu adăugați de două ori același divizor.

0 și factorizarea

Algoritmii de divizori și factori primi trebuie aplicați pe valori pentru care cerința este definită; tratați explicit cazurile speciale.

07
EXEMPLU REZOLVAT

Inspectorul numărului 84

Problemă

Se citește n. Afișați toți divizorii în ordine crescătoare, precizați dacă n este prim sau compus și afișați descompunerea în factori primi.

Analiză

Pentru divizori folosim perechi până la √n. Pentru primalitate căutăm un divizor propriu între 2 și √n. Pentru factorizare împărțim repetat la fiecare candidat cât timp împărțirea este exactă.

Python

from math import isqrt
n = int(input("n = "))

divizori = []
for d in range(1, isqrt(n) + 1):
    if n % d == 0:
        divizori.append(d)
        if d != n // d:
            divizori.append(n // d)
divizori.sort()
print("Divizori:", divizori)

prim = n > 1
for d in range(2, isqrt(n) + 1):
    if n % d == 0:
        prim = False
        break
print("Numărul este prim." if prim else "Numărul este compus.")

m = n
factori = []
d = 2
while d * d <= m:
    while m % d == 0:
        factori.append(d)
        m //= d
    d += 1
if m > 1:
    factori.append(m)
print("Factori primi:", factori)

Urmărirea variabilelor

mdacțiune
84284 % 2 = 0 → factor 2; m devine 42
42242 % 2 = 0 → factor 2; m devine 21
21321 % 3 = 0 → factor 3; m devine 7
744·4 > 7; rămâne factorul prim 7

Testare

Testați 2, 1, 36, 84, un număr prim mare și un pătrat perfect. Pentru 84 rezultatul este divizorii [1,2,3,4,6,7,12,14,21,28,42,84], compus, factori [2,2,3,7].

Verificare

Produsul factorilor este 2·2·3·7 = 84, iar fiecare divizor afișat divide exact 84.

08
EXERCIȚII DE BAZĂ

Aplică direct

  1. Scrie toți divizorii pozitivi ai numerelor 18, 25 și 32.
  2. Precizează care dintre 2, 9, 13, 21, 29 și 35 sunt prime.
  3. Scrie un program care citește n și afișează numărul de divizori pozitivi.
  4. Verifică dacă n este prim folosind verificarea până la √n.
  5. Verifică dacă 6, 28 și 496 sunt numere perfecte.
  6. Realizează descompunerea în factori primi pentru 60, 72, 90 și 150.
09
EXERCIȚII DE APROFUNDARE

Eficiență, generalizare și cazuri-limită

  1. Compară parcurgerea divizorilor până la n cu cea până la √n pentru valori mari.
  2. Scrie o funcție care determină numărul de divizori folosind perechi.
  3. Determină toate numerele prime dintr-un interval [a,b].
  4. Determină toate numerele perfecte dintr-un interval.
  5. Scrie o funcție care returnează factorii primi cu multiplicitate.
  6. Afișează descompunerea într-o formă precum 84 = 2^2 * 3 * 7.
  7. Compară numărul de verificări efectuate de cele două metode de determinare a divizorilor.
10
VERIFICARE

Verifică ce ai înțeles

11
MINI-PROIECT

Inspectorul numerelor

MISIUNE

Construiește un raport complet

Realizează o aplicație Python care primește n și afișează divizorii, numărul de divizori, primalitatea, dacă este perfect și descompunerea în factori primi.

  1. Organizează soluția în funcții divizori, este_prim și factori_primi.
  2. Adaugă, dacă este potrivit, este_perfect.
  3. Testează cazuri-limită și valori mari.
  4. Compară soluția directă cu cea până la √n.

Criterii

Corectitudine40%
Algoritm și eficiență25%
Modularizare20%
Claritate15%

Ai terminat lecția?

Recitește explicațiile și verifică rezultatele înainte de a marca lecția.