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++
Răspunsuri la întrebare
#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;
}