首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-28 
c语言的回文质数,我做的时间老是超时,算法不好,求解优秀算法!【USACO1.5.2】回文质数Time Limit:10000MSMemo

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,够了。

热点排行