USACO

来源:互联网 发布:罗素名言 知乎 编辑:程序博客网 时间:2024/06/04 19:58

Prime Palindromes

题目描述

因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数。

写一个程序来找出范围[a,b](5 <= a < b <= 100,000,000)( 一亿)间的所有回文质数;

输入输出格式

输入格式:
第 1 行: 二个整数 a 和 b .

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

输入输出样例

输入样例#1
5 500
输出样例#1:
5
7
11
101
131
151
181
191
313
353
373
383

采取构造 + 判断质数的方法,先生成回文数,再判断质数。

Code

#include <iostream>#include <cmath> using namespace std;bool prime(int x){    bool flag = true;    for(int i=2;i<=sqrt(x);i++)    {        if(x % i == 0)            flag = false;    }    return flag;}int main(){    int a,b,c[100000],i=3;    int d1,d2,d3,d4,d5;    c[0]=5;c[1]=7;c[2]=11;//2位数和1位数只有这三个是回文质数    for(d1=1;d1<=9;d1+=2)        for(d2=0;d2<=9;d2++)        {            c[i]=d1*100+d2*10+d1;            i++;        }//生成3位回文数    for(d1=1;d1<=9;d1+=2)        for(d2=0;d2<=9;d2++)            for(d3=0;d3<=9;d3++)            {                c[i]=d1*10000+d2*1000+d3*100+d2*10+d1;                i++;            }//生成5位回文数    for(d1=1;d1<=9;d1+=2)        for(d2=0;d2<=9;d2++)            for(d3=0;d3<=9;d3++)                for(d4=0;d4<=9;d4++)                {                    c[i]=d1*1000000+d2*100000+d3*10000+d4*1000+d3*100+d2*10+d1;                    i++;                }//生成7位回文数    for(d1=1;d1<=9;d1+=2)        for(d2=0;d2<=9;d2++)            for(d3=0;d3<=9;d3++)                for(d4=0;d4<=9;d4++)                    for(d5=0;d5<=9;d5++)                    {                        c[i]=d1*100000000+d2*10000000+d3*1000000+d4*100000+d5*10000+d4*1000+d3*100+d2*10+d1;                        i++;                    }//生成9位回文数    cin >> a >> b;    for(int i=0;i<100000000;i++)    {        if(c[i]>=a&&c[i]<=b&&prime(c[i])==true) cout<<c[i]<<endl;        if(c[i]>b) break;    }}
0 0