Informatică, întrebare adresată de avion14, 8 ani în urmă

NU TREBUIE REZOLVAT COMPLET..DOAR SA MI SPUNETI IDEEA DE REZOLVARE LA
PUNCTUL B! DAU COROANA
Un număr n se numeşte extraprim dacă atât el, cât şi orice număr obţinut prin permutarea
cifrelor lui n, sunt numere prime. De exemplu, numărul 113 este un număr extraprim
deoarece 113, 311, 131 sunt numere prime.
a) Scrieţi definiţia completă a unui subprogram f, cu un parametru, subprogram care:
- primeşte prin intermediul parametrului a un număr natural cu cel mult 3 cifre (a>1)
- returnează suma tuturor exponenţilor din descompunerea în factori primi a valorii
parametrului a.
Exemplu: pentru a=90 subprogramul va returna valoarea 4, deoarece a=2*32
*5 şi
1+2+1=4. (4p.)
b) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n, 2≤n≤999 şi,
folosind apeluri utile ale subprogramului f, verifică dacă n este un număr extraprim. În caz
afirmativ, programul afişează pe ecran mesajul DA, în caz contrar afişând mesajul NU.

Răspunsuri la întrebare

Răspuns de adresaana
0

Răspuns:

Subprogramul de la punctul a trebuie sa returneze 0 daca parametrul de intrare este numar prim.

Apelezi subprogramul f pentru fiecare permutare a cifrelor lui n.

Daca toate rezultatele returnate sunt = 0, atunci numarul este extraprim.

Daca macar unul din rezultatele returnate de f este ≠ 0, atunci numarul nu este extraprim si poti afisa imediat NU.

Explicație:


andrei750238: Pentru a permuta cifrele unui numar ai in general 2 optiuni :
- Folosind vectori : descompui numarul in cifre si salvezi fiecare cifra intr-o pozitie din vector v[]. Cu un for i de la 1 la numarul de cifre parcurgi permutarile posibile iar cu alt for j de la i la numarul de cifre (si apoi iar de la 1 pana la i-1) consturuiesti permutarea (permutare = permutare*10 + v[j])
andrei750238: - Determini numarul de cifre al numarului . Salvezi in variabila putere valoarea 10 la puterea numarului de cifre din numar. La fiecare iteratie muti prima cifra la sfarsitul numarului. (nr = nr/putere + (nr%putere)*10). Stii ca ai un numar de iteratii egale cu numarul de cifre. In mod normal aceasta metoda e "pacatoasa" deoarece cifrele de 0 pot face probleme.
andrei750238: Dar in acest caz putem folosi metoda asta daca la inceputul programului verificam ca numarul sa nu aiba cifre pare (daca are cel putin o valoare para atunci nu e extreprim)
avion14: Mersi mult de tot!!! Esti foarte tare.. Cred ca esti foarte bun/buna la info
avion14: Am inteles acum..poti folosi metoda asta pt ca verifici la inceput sa nu aibe numere pare si scapi de varianta aia in care numarul contine 0..pt ca atunci intr adevar nu ti mai da bine.. Dar daca numarul putea contine si numere pare, atunci cum faceam? Exista si alta metoda?
andrei750238: In general acest tip de probleme evita folosirea cifrei 0 in componenta numarului. In general nu prea avem cum sa generam permutarile cifrelor unui numar daca numarul contine 0.

Singura varianta flexibila in cazul in care (cumva) ai si 0 ramane cea cu vectorul, prima metoda data de mine mai sus.

Dar nu cred ca o sa gasesti astfel de probleme.
andrei750238: Uite un exemplu pentru generarea permutarilor folosind vectori. Tine cont ca asta nu e cerinta de aici completa ci doar un exemplu pentru generarea permutarilor : https://pastebin.com/xANm93sY
andrei750238: Defapt ar fi necesara si intoarcerea vectorului. Scuze, uite aici programul bun : https://pastebin.com/vYH2kUwF
andrei750238: Observam ca daca introducem un numar care contine si 0 se vor genera corect permutarile (cu exceptia cazului in care prima cifra este 0, caz in care nu se mai afiseaza. Daca doream si afisarea cifrei 0 in loc de n=n*10+v[j] afisam direct cifra ( v[j] ) ).
andrei750238: Spre exemplu, daca citim 12045 se va afisa :
12045
20451
4512
45120
51204
Alte întrebări interesante