pprime-section1.5

来源:互联网 发布:网络用语bp是什么意思 编辑:程序博客网 时间:2024/06/05 12:25

题目大意

因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;

输入格式

line 1: 二个整数 a 和 b 

输出格式

输出一个回文质数的列表,一行一个。

样例输入

5 500

样例输出

5711101131151181191313353373383

题解

为了避免超时,先把所有奇数回文数列出来(偶数不可能是质数),然后再依此检查是否是质数。

代码

#include<stdio.h>#include<math.h>long int a,b;long int huiwen[1000000]={0};int sushu(long int a){long int i;for(i=2;i<a;i++)    if(a%i==0)        return 0;return 1;}int main(){scanf("%ld %ld",&a,&b);long int aa,bb,i,j=0;int d1,d2,d3,d4;for(d1=1;d1<=9;d1=d1+2){    huiwen[j]=d1;    j++;}for(d1=1;d1<=9;d1=d1+2){    huiwen[j]=d1*10+d1;    j++;}for(d1=1;d1<=9;d1=d1+2)    for(d2=0;d2<=9;d2++)    {        huiwen[j]=d1*100+d2*10+d1;        j++;    }for(d1=1;d1<=9;d1=d1+2)    for(d2=0;d2<=9;d2++)    {        huiwen[j]=d1*1000+d2*100+d2*10+d1;        j++;    }for(d1=1;d1<=9;d1=d1+2)    for(d2=0;d2<=9;d2++)        for(d3=0;d3<=9;d3++)        {            huiwen[j]=d1*10000+d2*1000+d3*100+d2*10+d1;            j++;        }for(d1=1;d1<=9;d1=d1+2)    for(d2=0;d2<=9;d2++)        for(d3=0;d3<=9;d3++)        {            huiwen[j]=d1*100000+d2*10000+d3*1000+d3*100+d2*10+d1;            j++;        }for(d1=1;d1<=9;d1=d1+2)    for(d2=0;d2<=9;d2++)        for(d3=0;d3<=9;d3++)            for(d4=0;d4<=9;d4++)            {                huiwen[j]=d1*1000000+d2*100000+d3*10000+d4*1000+d3*100+d2*10+d1;                j++;            }for(d1=1;d1<=9;d1=d1+2)    for(d2=0;d2<=9;d2++)        for(d3=0;d3<=9;d3++)            for(d4=0;d4<=9;d4++)            {                huiwen[j]=d1*10000000+d2*1000000+d3*100000+d4*10000+d4*1000+d3*100+d2*10+d1;                j++;            }for(i=0;i<j;i++){    if(huiwen[i]>=a)    {   aa=i;break;}}for(i=0;i<j;i++){    if(huiwen[i]>b)    {   bb=i-1;break;}}for(i=aa;i<=bb;i++){    if(sushu(huiwen[i])==1)    {        printf("%ld\n",huiwen[i]);    }}return 0;}
原创粉丝点击