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

qiumin333 2012-04-21 11:05:24
【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
我的源代码:
#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;
}
...全文
404 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_admi 2012-04-22
  • 打赏
  • 举报
回复
额,刚才查了下,如果short=int,那么int肯定不够;如果long=int那么10E+8 < 2^32-1,够了。
super_admi 2012-04-21
  • 打赏
  • 举报
回复
1E8,这个应该超出int范围了吧。
mLee79 2012-04-21
  • 打赏
  • 举报
回复
回文素数除了2,3,5,7,11外, 总是奇数位的, 首位是1379, 因此1E8内没有多少个, 你应该构造回文数, 然后检测是否素数.
Chiaching 2012-04-21
  • 打赏
  • 举报
回复
你应该先判断 质数 将质数存入一个数组 。。。。然后在判断 数组中是否为回文数
你这个代码是从n到m每次都判断质数和回文数 提高了时间复杂度
evencoming 2012-04-21
  • 打赏
  • 举报
回复
提供思路:
打表法, 记录6300多个质数,然后 判断是否是回文数.
或者,直接全部打表,直接输出所有
Chiaching 2012-04-21
  • 打赏
  • 举报
回复
用指针 应该可以的。。。。
设计一个验证质数函数 在质数函数中调用判断是否是回文数函数。。。。。。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧