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