Вы можете написать короткую функцию для проверки простоты числа.
Код ниже основан на псевдокоде из Википедии .Объяснение того, как это работает, объясняется более подробно там, но по существу, чтобы проверить, является ли число n
простым, вам нужно проверить, что оно не делится на любое простое число i
от 2
до sqrt(n)
.
bool is_prime(int n) {
if (n <= 1)
return false;
else if (n <= 3)
return true;
else if (n % 2 == 0 || n % 3 == 0)
return false;
int i = 5;
while (i*i <= n) {
if (n % i == 0 || n % (i + 2) == 0)
return false;
i += 6;
}
return true;
}
Теперь вы можете проверить, простое ли a
, просто позвонив по номеру
is_prime(a);
Чтобы проверить, простое ли обратное, вам необходимо вычислить число равных a
.Я нашел интересный подход от Arslan7041 здесь , который работает почти так же, как то, что вы уже делаете:
int reverse(int x) {
bool negative = false;
if(x < 0) {
negative = true;
x = -x;
}
int reversed = 0;
while(x > 0) {
reversed = reversed*10 + x%10;
x /= 10;
}
if(negative) reversed = -reversed;
return reversed;
}
И теперь вы можете проверить, проста ли обратная сторона a
со следующим:
is_prime(reverse(a));
Наконец, мы можем решить ваши два особых ограничения с помощью простого оператора if.
if (1 <= a && a <= 2000000000 && a % 10 != 0
&& is_prime(a) && is_prime(reverse(a)) ) {
cout << "DA\n";
}