c语言的回文质数,小弟我做的时间老是超时,算法不好,求解优秀算法

c语言的回文质数,我做的时间老是超时,算法不好,求解优秀算法!
【USACO1.5.2】回文质数

Time Limit:10000MS Memory Limit:65536K
Total Submit:79 Accepted:11 
Case Time Limit:1000MS 

Description 

  因为151即是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 号是回文质数。写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)间的所有回文质数。

Input 

 第 1 行: 二个整数 a 和 b . 

Output 

 输出一个回文质数的列表,一行一个。 


Sample Input 


 5 500

Sample Output 


 5
 7
 11
 101
 131
 151
 181
 191
 313
 353
 373
 383
Source 
我的源代码:
C/C++ code
#include<stdio.h>
#include<math.h>
#include<string.h> 
void main()
{
    int chuli(long);
    long m,k,d,n;
    long i;
    scanf("%d%d",&n,&m);
    for(i=n;i<=m;i++){
        k=sqrt(i);
        for(d=2;d<=k;d++){
            if(i%d==0)
                break;
        }
        if(d>k){
            if(chuli(i)==1)
                printf("%d\n",i);
        }
    }
}
int chuli(long z)
{
    long i=0,j;
    int arr[100];
    while(z){
        arr[i]=z%10;
        z=z/10;
        i++;
    }
    for(j=0;j<i/2;j++)
    {
        if(arr[j]!=arr[i-j-1])
            return 0;
    }
    return 1;
}


------解决方案--------------------
用指针 应该可以的。。。。
设计一个验证质数函数 在质数函数中调用判断是否是回文数函数。。。。。。
------解决方案--------------------
回文素数除了2,3,5,7,11外, 总是奇数位的, 首位是1379, 因此1E8内没有多少个, 你应该构造回文数, 然后检测是否素数.
------解决方案--------------------
1E8,这个应该超出int范围了吧。
------解决方案--------------------
额,刚才查了下,如果short=int,那么int肯定不够;如果long=int那么10E+8 < 2^32-1,够了。