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