Informatică, întrebare adresată de lautarusclaudiu, 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.
Primesc 91 de pcte ,asa vad eu solutia dar e gresita ptr cateva nr ,ex .14,16.Poate cineva s ama ajute sa inteleg unde gresesc?
#include
using namespace std;

int main() {
int X, nr_invers=0, ramas;
cin>>X;
int CX = X;//facem o copie a lui X
while(X != 0){
ramas = X%10;
nr_invers = nr_invers*10 + ramas;
X/=10;
}

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

while(i< nr_invers){
if(nr_invers % i == 0){
este_prim2 = 0;
}
++i;
}
if(CX == 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;
}

Răspunsuri la întrebare

Răspuns de ianisgamer9
0

Răspuns:

#include <iostream>

using namespace std;

int main()

{

  int a,inv,c,d1=0,d2=0;

  cin>>a;

  for (int i=1;i<=a ;++i){   // aici numaram in d1 nr de divizori a  numaruluui a

      if (a%i==0) ++d1;

  }

  if (d1==2)

   {       // daca nr de divizori este 2, nr dat este prim

      inv=0;          // aici cream inversul nr dat a

      while (a!=0)

      {

         c=a%10;

         inv=inv*10+c;

         a=a/10;

      }

      for (int i=1;i<=inv ;++i){  // aici in d2 numaram cati divizori are inv

      if (inv%i==0) ++d2;

      }

      if(d2==2) cout<<"DA";   // daca si d2 = 2 at ambele sunt prime

      else cout<<"NU";        // altfel nu

  } else cout<<"NU";          // aici e cazul cand d1!=2 , adica nr dat nu e prim

  return 0;

}


lautarusclaudiu: Multumes f mult dat trebuie sa o rezol doar cu if ,else,while.Nu pot folosi" for "
Alte întrebări interesante