Informatică, întrebare adresată de ProMinecraft69, 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.

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

Am incercat vreo 3 programe... nu inteleg de ce site-ul nu le accepta, in code blocks merge. Poate reusiti sa imi explicati.


ProMinecraft69: #include

using namespace std;

int main() {

int a,d,e,ogl,ok,okk,c;
ok=0;
okk=0;
cin>>a;
ogl=0;
d=2;
e=2;
while(a % d !=0 && d<=a/2) {
d++;
}
if(a % d !=0) {
ok=1;
}
while(a>0){
c=a%10;
a=a/10;
ogl=ogl * 10 +c ;
}
while(ogl % e!=0 && e<=ogl/2){
e++;
}
if(ogl % e !=0){
okk=1;
}
if (ok==1 && okk==1)
cout<<"da";
else
cout<<"nu";

return 0 ;

}
andreidiaconescu18: pe care site nu ti le accepta si in ce sens nu ti le accepta?
andreidiaconescu18: fi atent la ce output asteapta testul sa verifice. nu cumva tre sa printezi: DA/NU cu litere mari?
ProMinecraft69: Asa e, trebuia cu litere mari, dupa ce am pus litere mari mi-a dat 90/100 puncte si nu pot trece mai departe :))
andreidiaconescu18: iti crapa testul pentru a=2 cel mai probabil
ProMinecraft69: Pai si ce sa fac, sa bag la inceput un if pentru a>2 care sa tina pana la sfarsit?
andreidiaconescu18: e la alegerea ta cum implementezi acest caz
Miercuri2002: Ce numar este?
Miercuri2002: Pe pbinfo
ProMinecraft69: Nu e pe pb info, este pe Well Code.

Răspunsuri la întrebare

Răspuns de boiustef
4

#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;

}


boiustef: nu e cea mai eficace metoda de numarare a divizorilor, dar pe wellcode merge...
Alte întrebări interesante