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

Scrieți un program care citește de la tastatură un număr natural n, apoi n numere naturale de cel mult nouă cifre, și afișează pe ecran câte dintre aceste numere au proprietatea că suma cifrelor lor este un număr prim.
Am nevoie de program in C++. Mulțumesc!

Răspunsuri la întrebare

Răspuns de Sergetec
1

Salut!

Ai rezolvarea mai jos

#include <iostream>

using namespace std;

bool prim(int n)

{

 if (n <= 1)

 {

   return false;

 }

 else if (n != 2 && n % 2 == 0)

 {

   return false;

 }

 for (int i = 3; i * i <= n; i += 2)

 {

   if (n % i == 0)

   {

     return false;

   }

 }

 return true;

}

int sumcif(int n)

{

 int s = 0;

 while (n)

 {

   int c = n % 10;

   s += c;

   n /= 10;

 }

 return s;

}

int main()

{

 int n, x, cnt = 0;

 cin >> n;

 for (int i = 1; i <= n; ++i)

 {

   cin >> x;

   if (prim(sumcif(x)))

   {

     cnt++;

   }

 }

 cout << cnt;

 return 0;

}


gabrieldobrinmm: Multumesc frumos! Crezi ca ai putea sa imi si explici putin algoritmul?
Sergetec: In primul rand, ne declaram niste functii ajutatoare, mai exact functia care ne verfica daca un nr este prim si functia care ne calculeaza suma cifrelor (le am dat si nume sugestie "prim" care este o functie booleana deci ne returneaza true sau false si "sumcif" care este o functie int deci ne returneza o valoare).
Sergetec: Mai departe, ne declaram variabilele de care avem nevoie, adica n, x si cnt (care ne va numara cate numere care indeplinesc conditia am citit). Intr-un for de la 1 la n vom citi numerele pe rand, iar mai apoi verificam daca conditia ca "prim de sumcif de x" este true (daca in if nu punem nimic atunci se considera automat ca si cum ar fi "== true"), iar daca ne indeplineste conditia, crestem cnt, in final afisand variabila cnt.
Alte întrebări interesante