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

Dandu-se un numar natural a, sa se verifice daca a si inversul lui a sunt ambele prime.
Date de intrare: Se citește de la tastatura numărul a.
Date de ieșire: Sa se afișeze DA dacă numarul a și inversul sau sunt ambele prime, sau NU, in caz contrar.
Restricții: 1 <= a <= 300000, iar a nu are ultima cifra 0. Exemple: 5 DA, 122 NU, 17 DA.

Am voie sa folosesc doar if, else, else if și while, fără FOR.

Răspunsuri la întrebare

Răspuns de andrei750238
2

#include <iostream>

using namespace std;

int main(){

   unsigned a,invers=0,copie;

   unsigned i;

   bool a_este_prim=1, invers_este_prim=1;

   //Citire a, realizare copie

   cin >> a;

   copie=a;

   //Construire invers

   while(copie>0){

       invers = invers * 10 + copie%10;

       copie=copie/10;

   }

   //Verificare daca a este prim

   if(a<2) a_este_prim=0;

   for(i=2;i<=a/2;i++)

       if(a%i==0) a_este_prim=0;

   //Verificare daca inversul este prim

   if(invers<2) invers_este_prim=0;

   for(i=2;i<=a/2;i++)

       if(a%i==0) invers_este_prim=0;

   //Verificare daca a si invers sunt ambele prime

   if(a_este_prim && invers_este_prim) cout << "DA";

   else cout << "NU";

}


helen18: Îți multumesc! Însă eu nu am voie sa folosesc FOR. ☺️
helen18: #include
using namespace std;

int main () {
int a, inverse = 0;
cin >> a;
while (a != 0) {
inverse = inverse * 10 + a % 10;
a /= 10;
}
int i = 2, is_prime1 = 1, is_prime2 = 1;
while (i <= a / 2) {
if(a % i == 0) {
is_prime1 = 0;
}
++i;
}
while (i <= inverse / 2) {
if (inverse % i == 0) {
is_prime2 = 0;
}
++i;
}
if (a == 1) {
is_prime1 = 0;
}
if (inverse == 1) {
is_prime2 = 0;
}
if ((is_prime1 == 1) && (is_prime2 == 1)) {
cout << "DA";
} else {
cout << "NU";
}
return 0;
}
helen18: Acesta este codul scris de mine, funcționează pe exemplele de mai sus, însă nu funcționează pe toate testele (41, 14, 16, 61 etc).
Alte întrebări interesante