Se citește un numár natural k de la tastaturá. Sá se afişeze toate numerele n care au k cifre şi urmatoarele proprietát: a) n-1 şi n+1 sunt numere prime; b) suma cifrelor lui n este tot numár prim. (Indicație. Se calculează mai întâi limitele intervalului în care n poate lua valori: cel mai mic numár ou k cifre şi cel mai mare număr cu k cifre). 11
#include <iostream>
using namespace std;
int main() {
int k;
cout << „Introduceti numarul de cifre k: „;
cin >> k;
// Calculam limitele intervalului in care se pot gasi numerele cautate
int a = 1;
for (int i = 1; i < k; i++) {
a *= 10;
}
int b = a * 10 – 1;
// Cautam numerele care indeplinesc conditiile
for (int n = a; n <= b; n++) {
// Verificam daca n-1 si n+1 sunt numere prime
int este_prim1 = 1;
for (int i = 2; i <= n / 2; i++) {
if ((n – 1) % i == 0) {
este_prim1 = 0;
break;
}
}
int este_prim2 = 1;
for (int i = 2; i <= (n + 1) / 2; i++) {
if ((n + 1) % i == 0) {
este_prim2 = 0;
break;
}
}
// Verificam daca suma cifrelor lui n este numar prim
int suma_cifre = 0;
int m = n;
while (m > 0) {
suma_cifre += m % 10;
m /= 10;
}
int este_prim3 = 1;
for (int i = 2; i <= suma_cifre / 2; i++) {
if (suma_cifre % i == 0) {
este_prim3 = 0;
break;
}
}
// Afisam numarul n daca indeplineste toate conditiile
if (este_prim1 && este_prim2 && este_prim3) {
cout << n << endl;
}
}
return 0;
}
Programul citește de la tastatură un număr natural k și apoi găsește limitele intervalului în care numărul n poate lua valori: cel mai mic număr cu k cifre și cel mai mare număr cu k cifre. Apoi, pentru fiecare număr n din interval, verifică dacă n-1 și n+1 sunt numere prime și dacă suma cifrelor lui n este tot un număr prim. Dacă aceste condiții sunt îndeplinite, atunci numărul n este afișat pe ecran.
Pentru a verifica dacă un număr este prim, programul folosește o buclă care parcurge toate numerele între 2 și rădăcina pătrată a numărului și verifică dacă numărul este divizibil cu aceste numere. Dacă nu este divizibil cu niciun număr din intervalul respectiv, atunci numărul este prim.
Pentru a calcula suma cifrelor unui număr, programul împarte numărul la 10 și adună cifra obținută la suma, repetând acest proces până când numărul devine 0.