Informatică, întrebare adresată de mariusmarius0066, 9 ani în urmă

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ăspunsuri la întrebare

Răspuns de degetzelp
2

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

Anexe:
Răspuns de Kurapiika
0

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

Anexe:

mariusmarius0066: Problema e ca eu trebui sa o rezolv fara "for" doar cu: while, if, else if. Trebui sa ma incadrez doar in aceste coduri.
Kurapiika: #include
int main()
{
unsigned n, i, j, prim1=1, prim2=1, inv=0, da=0, m;
cout<<"n="; cin>>n; m=n;
i=2; j=2;
while(i<=m/2){
if(m%i==0)
prim1=0;
i++;
}
if(prim1==1){
while(n){
inv=inv*10+n%10;
n=n/10;
}
while(j<=inv/2){
if(inv%j==0)
prim2=0;
j++;
}
if(prim2==1)
da=1;}
if(da==1)
cout<<"Da.";
else cout<<"Nu.";
return 0;
}
Kurapiika: #include < iostream.h >
mariusmarius0066: Multutumesc frumos! Am rezolvat-o mi-am dat seama de greseala.
Alte întrebări interesante