C语言问题求解答!!!!

绝对素数是指本身是素数,其逆序数也是素数的数。例如:10321与12301是绝对素数。

编程实现:键盘输入一个整数n,输出小于n的所有绝对素数。

要求:编写函数int isprime(int x)实现测试参数x是否为素数;编写函数int convert(int x),返回参数x的逆序数。main中完成输入输出与函数调用。

编写十进制数到二进制、八进制、十六进制间的转换程序。要求:键盘输入一个十进制的数,输出其对应的二进制、八进制、十六进制数。小数部分可以只输出8位以内

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

#define SWAP(a, b, t) t = (a), (a) = (b), (b) = (t);  // 交换两个数的位置

int foo1(int m);          // 计算素数  , 是返回1, 否返回0
int foo2(int m);          // 计算反序数, 是返回1, 否返回0

int main()
 {
     int m, n, x;
     int t;

     scanf("%d%d", &m, &n);
     if (m > n)             // 如果第一个数大于第二个数,就交换位置 没有做<1000的判断, 需要可以加上去.
        SWAP (m, n, t);

     for (x = m; x <= n; x++)
         if (foo1(x))       // 1. 计算x是否是素数
            if (foo2(x))   // 2. 计算反序数是否是素数
            printf("%d\n", x);
     return 0;
 }

int foo1(int m)
 {
     int i;
     for (i = 2; i <= sqrt(m); i++)
         if (m % i == 0)
             return 0;
     return 1;
 }

int foo2(int m)
 {
     int x = 0, t = 0;

     while(m) {         // 求反序数
        x = m % 10;
         t = t * 10 + x;
         m = m / 10;
     }
     if (foo1(t))      // 计算反序数是否是素数.
        return 1;
     return 0;
 }
 int convert(int n)  
{  
    int n_Inv;  
    n_Inv=0;  
    while (n/10!=0)  
    {  
        n_Inv=n_Inv*10+n%10;  
        n=n/10;  
    }  
    n_Inv=n_Inv*10+n;  
    return n_Inv;  
} 

int is_prime(int n)  
{  
    int i;  
    int sqr;  
    sqr=(int)sqrt(n);  
    if (n==2)  
    {  
        return 1;  
    }  
    for (i=2;i<=sqr;i++)  
    {  
        if (n%i==0)  
        {  
            return 0;  
        }  
    }  
    return 1;  
}  

int main()  
{  
    int n=0;
    int i=0;
    printf("Please Enter: ");  
    scanf("%d",&n);  
    for (i=2;i<=n;i++)  
    {  
        if (is_prime(i) && is_prime(convert(i)))  
        {  
            printf("%d\n",i);               
        }  
    }    
    return 0;
}