Ваш цикл проверяет, является ли DN простым, но не проверяет, является ли a1 простым.И этот блок кода является чем-то, что я не понимаю.
if (a1 > i && a1 % i == 0) {
este_prim2 = 0;
}
Так что просто удалите это.
Используйте эту достойную вспомогательную функцию, чтобы определить, является ли положительное число простым:
bool isPrime(int x)
{
if (x <= 1)
return false;
// 2 is the only even prime
if (x == 2)
return true;
// any other even number is not prime
if ((x % 2) == 0)
return false;
// try dividing by all odd numbers from 3 to sqrt(x)
int stop = sqrt(x);
for (int i = 3; i <= stop; i += 2)
{
if ((x % i) == 0)
return false;
}
return true;
}
А затем ваш код для определения, если DN
и его зеркало, a1
простое число, это:
int main() {
int a, a1, DN;
cin >> a;
DN = a;
a1 = 0;
for (; a != 0;) {
a1 *= 10;
a1 = a1 + a % 10;
a /= 10;
}
bool este_prim, este_prim2;
este_prim = isPrime(DN);
este_prim2 = isPrime(a1);
if (este_prim2 && este_prim) {
cout << "DA";
} else {
cout << "NU";
}
}