Sari la conținut
EduCamp
Definitivat 2026 Problemă 15 puncte

Subiectul I, cerința 3

CP-produsul unui număr

Subprogramul care calculează produsul cifrelor prime impare și programul C++ care verifică fișierul de coduri, cu algoritmul descris pas cu pas.

Cifrele prime impare

Cifrele prime sunt 2, 3, 5 și 7. Dintre acestea, impare sunt 3, 5 și 7, deci numai ele intră în produs. Cifra 2 este primă, dar pară; cifrele 0, 1, 4, 6, 8 și 9 nu sunt prime.

Produsul se inițializează cu 1, elementul neutru al înmulțirii. Dacă numărul nu are nicio cifră primă impară, produsul rămâne 1, valoarea cerută de enunț în acest caz.

Descrierea algoritmului în limbaj natural

Se citește din fișier primul număr, care este codul permanent, și se reține valoarea lui, împreună cu CP-produsul său, calculat prin apelul subprogramului produs.

Se citesc apoi, unul câte unul, numerele rămase în fișier, până la epuizarea lui. Valorile nule se ignoră: ele despart codul permanent de codurile generate și nu reprezintă coduri. La fiecare valoare nenulă citită se numără un cod generat în plus.

Pentru fiecare cod generat se verifică dacă este corespunzător, adică dacă îndeplinește simultan două condiții: să fie diferit de codul permanent și să aibă același CP-produs cu acesta. Codurile care nu îndeplinesc ambele condiții se numără separat.

După parcurgerea întregului fișier, dacă numărul codurilor necorespunzătoare este zero, se afișează mesajul CORECT. În caz contrar, se afișează numărul total de coduri generate și numărul celor necorespunzătoare, separate printr-un spațiu.

Numerele se prelucrează pe măsură ce se citesc, fără a fi memorate într-un tablou: pentru fiecare cod generat sunt de ajuns valoarea lui și CP-produsul codului permanent, calculat o singură dată, la început.

Programul

#include <iostream>
#include <fstream>
using namespace std;

ifstream f("def2026.txt");

/* Intoarce produsul cifrelor prime impare ale lui n — cifrele 3, 5 si 7.
   Fara nicio astfel de cifra, produsul ramane 1, initializarea lui. */
int produs(int n) {
    int p = 1, c;
    do {
        c = n % 10;
        if (c == 3 || c == 5 || c == 7)
            p = p * c;
        n = n / 10;
    } while (n != 0);
    return p;
}

int main() {
    int permanent, cpPermanent, x, total = 0, gresite = 0;

    f >> permanent;
    cpPermanent = produs(permanent);

    while (f >> x)
        if (x != 0) {
            total++;
            if (x == permanent || produs(x) != cpPermanent)
                gresite++;
        }

    f.close();

    if (gresite == 0)
        cout << "CORECT";
    else
        cout << total << " " << gresite;

    return 0;
}

Rezolvarea se poate citi pe educamp.ro, la adresa de mai sus.

Ce cuprinde rezolvarea

  1. Cifrele prime impare
  2. Descrierea algoritmului în limbaj natural
  3. Programul
  4. Verificarea pe exemplele din enunț

Vezi rezolvarea ca și cursant

Cel puțin o cerință din fiecare an este disponibilă gratuit și integral. Pentru a citi toate celelalte rezolvări ale disciplinei, te înscrii la cursul de pregătire.

Cursul cuprinde suportul de curs publicat până acum, care se completează capitol cu capitol, și două întâlniri de câte două ore în fiecare lună. Prima săptămână este gratuită, fără plată și fără card. Dacă vrei să vezi mai întâi cum este scrisă o rezolvare, poți reveni la prima cerință a anului.

Începe săptămâna gratuită Sunt cursant — login

Actualizat: 25 august 2026