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

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.

Am incercat codul acesta, dar imi spune doar daca oglinditul lui(ex: 142 => 241) este numar prim, astfel ca nu verifica daca si numarul "a" este prim

#include

using namespace std;

int main()
{
int inv=0;
int a;
int i = 2;
int prim1 = 1;
int prim2 = 1;
cin>>a;
while(a!=0){
inv = inv * 10+a%10;
a=a/10;
}
while(i < a){
if(a % i == 0){
prim1 = 0;
}
++i;
}
while(i < inv){
if(inv % i == 0){
prim2 = 0;
}
++i;
}
if(a == 1)
prim1 = 0;
if(inv == 1)
prim2 = 0;
if(prim1 == 1 && prim2 == 1)
cout<<"DA";
else
cout<<"NU";
return 0;
}


carat033: Vrei sa fac alt program sau sa-l corectez pe al tau? x-x
adrian1elefterescu: sa-mi spui ce e gresit dandu-mi un exemplu, 2

Răspunsuri la întrebare

Răspuns de carat033
1

Deci, in primul rand, mai bine iti fac o alta varianta mai mica si mai eficienta.

Dupa al doilea while, trebuie sa setezi i-ul iar la valoarea 2.

daca tu l-ai impartit pe a in primul while la 10 pana a devenit 0, acum trebuie sa-i dai lui a valoarea de la inceput, de-aia nu iti ia decat inversul, pentru ca a-ul tau este 0. Ca sa faci sa functioneze algoritmul, trebuie sa scoti cei 2 if (if (a==1) si if(inv==1) pentru ca tu deja ii atribui lui prim1 valoarea 0 daca a%i==0 si lui prim2 valoarea 0 daca inv%i==0. Sper sa intelegi, daca nu, iti scriu un algoritm.


adrian1elefterescu: poti scrie totusi un cod, nu prea am inteles, mersi pentru ajutor, apreciez
Alte întrebări interesante