Ma poate ajuta cineva la problema asta in C++?

Dându-se un număr natural a, să se verifice dacă a și inversul (oglinditul) lui a sunt ambele numere prime.

Date de intrare
Se citește de la tastatură numărul natural a.

Date de ieșire
Să se afișeze DA dacă numărul a și inversul său sunt ambele prime sau NU, în caz contrar.

Restricții și precizări
1 ≤ a ≤ 2000000000
a nu are ultima cifră 0

Eu am facut asta:
#include
using namespace std;

int main() {
int a, nr_invers = 0, ramas;
cin>>a;
int Ca = a;
while(a != 0){
ramas = a%10;
nr_invers = nr_invers*10 + ramas;
a/=10;
}

int i = 2, este_prim = 1, este_prim2 = 1;
while(i< a){
if(a % i == 0){
este_prim = 0;
}
++i;
}

while(i< nr_invers){
if(nr_invers % i == 0){
este_prim2 = 0;
}
++i;
}
if(Ca == 1){
este_prim = 0;
}
if(nr_invers == 1){
este_prim2 = 0;
}

if(este_prim ==1 && este_prim2 == 1){
cout<<"DA";
} else {
cout<<"NU";
}
return 0;
}


Primesc doar 88 de puncte. Stiu ca trebui sa mai adaug pe undeva conditia asta a%10 != 0; Dar oriunde as pune-o imi scade puncte...

Nu cred ca e altceva gresit...

Multumesc anticipat!


Răspuns :

Eu personal asa am facut, si cred ca e corect:

Vezi imaginea DEGETZELP

In al doilea while, i-ul incepe de la 2 (e bun). Problema este ca, atunci cand va ajunge la urmatorul while, i-ul e modificat din cauza primului while. Pe langa asta, i-ul trebuie sa mearga pana la a/2. Tu ai pus pana la <a..nu-i bun. Apropo, care a? L-ai impartit in primul while si acum e 0. Mai departe. Nu inteleg ce ai incercat la primele doua if-uri. if (Ca==1) este_prim=0. Pai, tu ai dat variabilei Ca valoarea lui a (dupa ce a fost citit). Sa spunem, a=13, Ca=a; deci, Ca va fi 13, in niciun caz 1.

Recomand sa mergi cu for. Am facut problema, o ai mai jos. Prima data am citit n-ul. Am verificat cu for daca e prim, iar daca este, face inversul. Dupa invers, verifica daca si el este prim. Si in final, daca si inversul este prim, afiseaza "da", altfel "nu".

Poti sa scrii rezolvarea in c++ si sa intelegi mersul. Bafta! :D

Vezi imaginea KURAPIIKA