C语言问题:请找出小于1000的回文素数

程序该怎么编辑?要详细答案!尽快!!~~一但采纳再追加10分奖赏!

将回文素数2单独处理一下,然后从3开始只考察奇数,这样可以提高时效。自定义一个判断素数和判断回文数的函数,在主函数用一个循环调用这两个函数来完成操作。另,百位为偶数的数可以跳过(因为它的回文数肯定不是素数)。代码如下:

#include "stdio.h"
int prime(int n){//判断n是否为素数
int i;
for(i=3;i*i<=n;i+=2)
if(!(n%i))
return 0;
return 1;
}
int palindrome(int n){//判断n是否为回文数
if(n<10)
return 1;
else if(n<100)
return n%10==n/10 ? 1 : 0;
else
return n%10==n/100 ? 1 : 0;
}
int main(int argc,char *argv[]){
int n,t;
printf("   2");//单独处理2
for(n=3;n<1000;n<12 || ((t=n/100)&1) ? n+=2 : n=t*100+101)//n这样增值可跨过百位为偶数的数,以进一步提高时效
if(palindrome(n) && prime(n))
printf("%4d",n);
printf("\n");
return 0;
}

运行结果如下图L

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-19
进行两次循环
第一次是进行加一
第二次循环数一直除1+1直到加到比本身小1
如果能整除
进行下一次循环
反之输出
返回进行下一次循环
这就是思路
如果要例子也可以补充下问题本回答被网友采纳
第2个回答  2013-11-19
编写程序,找出大于等于a,并且小于等于b的所有素数回文数。

第一行包括两个正整数a和b(1≤a≤b≤108)。

输出满足条件的所有素数回文数,每行一个数,从小到大的排序。
第3个回答  2013-11-19
#include <stdio.h>
#include <math.h>

int hw(int n) //判断回文数
{
int t,r=0;

for(t=n;t;t/=10) //把n从个位到最高位取反
r=r*10+t%10;
return r==n;
}

int ss(int n) //判断素数
{
int i;

for(i=2;i<=sqrt(n);i++) //从2到n的平方根判断能否被n整除
if(n%i==0)
return 0;
return 1;
}

void main()
{
int i,c=0;

for(i=2;i<1000;i++)
if(hw(i) && ss(i))
{
printf("%5d",i);
if(++c%10==0) //每行输出10个数
printf("\n");
}
}
第4个回答  2013-11-19
#include<stdio.h>
void main()
{
int a,b,c,d,e,f,h;
for(a=1;a<1000;a++)
{for(b=1,c=0;b<=a;b++)<br/> if(a%b==0) c++;<br/> if(c<=2)<br/> {if(a<10)printf("%d ",a);<br/> if(a>=10&&a<100) {d=a%10;e=(a-d)/10;if(d==e) printf("%d ",a);}
if(a>=100&&a<1000){d=a%10;e=a/100;if(d==e)printf("%d ",a);}
if(a>=1000&&a<10000){d=a%10;e=((a-d)/10)%10;f=((a-d-10*e)/100)%10;h=(a-d-10*e-100*f)/1000;if(d==h&&e==f)printf("%d ",a);}}}
}
这样就可以了

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网