Se da 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
Exemplu
Date de intrare Date de ieșire
5 DA
122 NU
17 DA
Pentru aceasta rezolvare nu primesc maximul
#include<iostream>
using namespace std;
int main()
{int a, inv_a;
cin>>a>>inv_a;
while (a!=0)
{ inv_a=inv_a*10+a%10;
a=a/10;
}
int i = 2, este_prim = 1;
while ((i < a)&&(i < inv_a))
{
if ((a % i == 0)&&(inv_a % i == 0))
este_prim = 0;
++i;
}
if ((a == 1)&&(inv_a == 1))
este_prim = 0;
if (este_prim == 1)
cout<<„DA”;
else
cout<<„NU”;
return 0;
}
1. Ce valoare are variabila „a”, dupa ce calculezi pe inv_a?
2. inv_a trebuie calculat, nu se introduce de la tastatura.
3. Exista algoritmi ceva mai eficienti pentru a afla daca un numar este prim sau nu.
4. Sunt deplasat daca ti-as sugera o incercare de modularizare a programelului? De exemplu, pentru inceput, fa o functie care calculeaza oglinditul unui numar dat ca parametru si o alta functie care verifica daca un numar dat este prim sau nu.
PS: Ai gresit putin aria.
tot nu imi iese . Ai putea sa dai o rezolvare mai concreta de rog !
Posteaza ultima varianta de cod te rog.
#include<iostream>
using namespace std;
int main()
{int a, inv_a;
cin>>a>>inv_a;
int i = 2, este_prim = 1;
while ((i < a)&&(i < inv_a))
{
if ((a % i == 0)&&(inv_a % i == 0))
este_prim = 0;
++i;
if (este_prim == 1)
cout<<„DA”;
else
cout<<„NU”;
}
return 0;
}
N-ai facut nimic din ce ti-am zis. In continuare citesti de la tastatura inversul numarului dat, doar ca acum nu mai incerci sa calculezi.
Problema pe care o ai este la legile lui De Morgan (https://en.wikipedia.org/wiki/De_Morgan%27s_laws).
trebuie inlocuit cu
O tentativa de cod ceva mai aerisit ar fi mai jos si contine in mare ce ti-am spus: