Problema: Se citeste de la tastatura un numar natural n. Sa se afiseze toti divizorii primi ai acestui numar.
Haideti mai intai sa dam un exemplu. Pentru n = 24 avem divizorii primi 2 si 3 (deoarece 24 = 23 * 3).
Divizor prim
Definitie: Un numar x este divizor al altui numar y, daca y se poate scrie ca produsul dintre x si un alt numar intreg t. In plus, daca x este un numar prim, acesta se numeste divizor prim al numarului y.
Mai multe despre divizori: Divizor – Wikipedia
Daca doresti in schimbi sa aflii toti divizorii unui numar, un algoritm mai usor este acesta: Algoritm pentru afisarea divizorilor unui numar
Algoritm pentru afisarea divizorilor primi ai unui numar
#include <iostream> using namespace std; int main() { int numar, putere; cin >> numar; int divizor = 2; while (numar > 1) { if(numar % divizor == 0) // Daca numarul se imparte exact la divizor { putere = 0; while(numar % divizor == 0) { putere = putere + 1; numar = numar / divizor; } cout << divizor << " la puterea " << putere << "\n"; } divizor++; } return 0; }
Incepem sa cautam divizorii posibili ai unui numar. Asa ca incepem cu 2.
Repetam urmatorii pasi atat timp cat numarul nostru este mai mare decat 1:
- Daca numarul se imparte exact la divizorul curent
- Se va impartii numarul la divizor de cate ori este posibil. Pentru fiecare data cand aceasta impartire este posibila, incrementam “putere”
- Se afiseaza divizorul si puterea divizorului
- Se incrementeaza divizorul.
Urmarind pas cu pas algoritmul:
Numar | Divizor | Putere |
24 | 2 | 0 |
12 | 2 | 1 |
6 | 2 | 2 |
3 | 2 | 3 |
3 | 3 | 0 |
1 | 3 | 1 |
0 | 4 | 0 |
Algoritmul acesta se poate optimiza foarte mult folosind Ciurul lui Eratostene, dar o sa discutam despre asta intr-un tutorial viitor.