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

Se citeste un numar natural n. Se cere:
a) Sa se verifice daca inversul lui n este numar prim. Se va afisa DA sau NU
b) Sa se verifice daca suma cifrelor lui n este numar prim. Se va afisa DA sau NU.
c) Cati divizori are suma cifrelor lui n?
d) Cati divizori are inversul lui n?

in c++


VaAjutCumPot: cum te cheama?

Răspunsuri la întrebare

Răspuns de Petruccinator
1

#include <iostream>

#include <cmath>

const char *rs[] = { "DA\n", "NU\n" };

bool *prime;

size_t s_cifre(size_t n) {

   size_t c = 0;

   

   while (n) {

       c += n % 10;

       n /= 10;

   }

   

   return c;

}

size_t invers(size_t n) {

   size_t c = 0;

   

   while (n) {

       c *= 10;

       c += n % 10;

       n /= 10;

   }

   

   return c;

}

size_t divizori(size_t n) {

   size_t c = 0;

   

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

       if (!(n % i))

           ++c;

           

   return c;

}

int main() {

   size_t n, sum, inv;

   std::cin >> n;

   prime = new bool[n + 1]();

   for (size_t j, i = 2; i < n; ++i)

       if (!prime[i])

           for (j = i + i; j <= n; j += i)

               prime[j] = true;

               

   sum = s_cifre(n);

   inv = invers(n);

   

   std::cout << rs[prime[inv]] << rs[prime[sum]] << divizori(sum) << '\n' << divizori(inv);

   delete[] prime;

}

Alte întrebări interesante