код для определения количества простых зеркальных чисел в заданном интервале в c не проходит все тестовые случаи - PullRequest
0 голосов
/ 23 апреля 2020

Я решаю проблему, когда в интервале [m, n] я должен найти зеркальные простые числа. Простые числа в зеркале - это простые числа, которые вы меняем местами и до сих пор получаем простое число (например, 17 и 71). Сайт, в котором я решаю, это дает мне 15 скрытых тестовых случаев, и мой код проходит только 12. Я не могу понять, о каких тестовых примерах я не думал.

#include <stdio.h>
#include <math.h>

long isPrime(long x){
  if ((x == 0) || (x == 1)) return 0;
  if ((x == 2) || (x == 3)) return 1;
  if (x%2 == 0) return 0;
  int root = sqrt(x) + 1;
  for (int i = 3; i < root; i = i + 2)
  {
     if (x%i == 0) {return 0;}
   }
     return 1;
}

long reverse(long n){
    long rev = 0, remainder;
    while (n > 0) {
        remainder = n % 10;
        rev = rev * 10 + remainder;
        n /= 10;
    }
    return rev;
}

int main(){
  long m,n;
  scanf("%ld %ld",&m,&n);
  long count=0;
  if(m==1 || m==0){count--;}
  if(m<n){
    for(long i=m;i<=n;i++){
      if(isPrime(i) && isPrime(reverse(i))){
        count++;
       }
     }
  printf("%ld",count);
}
  else{
    for(long i=m;i<=n;i++){
      if(isPrime(i) && isPrime(reverse(i))){
       count++;
       }
      }
  printf("%ld",count);
  }
return 0;
}
...