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
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. ☺️
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;
}
Alte întrebări interesante
Limba română,
8 ani în urmă
Limba română,
8 ani în urmă
Chimie,
8 ani în urmă
Limba română,
8 ani în urmă
Matematică,
9 ani în urmă
Matematică,
9 ani în urmă