题目描述 Description

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

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

输入描述 Input Description

*Line 1: a,b

输出描述 Output Description

a与b之间(含)的所有回文质数

一行一个

样例输入 Sample Input

5 500

样例输出 Sample Output

5
7
11
101
131
151
181
191
313
353
373
383

先找回文数,再判断是不是质数。

代碼實現(codevs 38ms,洛谷 44ms):

 #include<cstdio>
#include<algorithm>
using namespace std;
int a,b,c,s;
int hw[];
void find(int x){
c=s=x;c/=;
while(c){s*=;s+=c%;c/=;}//构造奇数数位的回文。
if(s>b) return;
if(s>=a) hw[++hw[]]=s;//满足条件的回文,录入。
c=s=x;
while(c){s*=;s+=c%;c/=;}//构造偶数数位的回文。
if(s>b) return;
if(s>=a) hw[++hw[]]=s;//满足条件的回文,录入。
for(int i=;i<;i++) find(*x+i);//继续寻找。
}
int main(){
scanf("%d%d",&a,&b);
for(int i=;i<=;i+=){
s=i;
find(i);
}
sort(hw+,hw+hw[]+);//排序,因为要求顺序输出
for(int i=;i<=hw[];i++)
for(int j=;j*j<=hw[i];){
if(hw[i]%j==) break;
j++;
if(j*j>hw[i]) printf("%d\n",hw[i]);//输出素数。
}
return ;
}

应老师要求,稍微优化了一下(codevs 4ms,洛谷 25ms):

 #include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;
int a,b,c,s;
int hw[];
int zs[maxn],zsm,d,l,re;
char ch[];
bool v[maxn+];
int read(){
l=,re=;
while(ch[l]=getchar())
if(ch[l]>=''&&ch[l]<='') break;
l++;
while(ch[l]=getchar()){
if(ch[l]>=''&&ch[l]<='') l++;
else break;
}
for(int i=;i<l;i++) re=re*+ch[i]-'';
return re;
}
void write(int x){
l=;
while(x){ch[l++]=x%+'';x/=;}
for(int i=l-;i>=;i--) putchar(ch[i]);
putchar('\n');
}
void find(int x){
c=s=x;c/=;
while(c){s*=;s+=c%;c/=;}
if(s>b) return;
if(s>=a&&(s%||s==)) hw[++hw[]]=s;
for(int i=;i<;i++) find(*x+i);
}
int main(){
for(int i=;i<=maxn;i++)
if(!v[i]){
zs[zsm++]=i;d=i+i;
while(d<=maxn){v[d]=;d+=i;}
}
a=read();b=read();
for(int i=;i<=;i+=){s=i;find(i);}
if(>=a&&<=b) hw[++hw[]]=;
sort(hw+,hw+hw[]+);
for(int i=;i<=hw[];i++){
d=;
while(){
if(hw[i]%zs[d++]==) break;
if(zs[d]*zs[d]>hw[i]||d>zsm){write(hw[i]);break;}
}
}
return ;
}

codevs上跑4ms的不是这段代码,但这段代码理论上更优,可能是评测机不在状态吧。不敢继续攻击网站了。

题目描述

因为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

说明

Hint 1: Generate the palindromes and see if they are prime.

提示 1: 找出所有的回文数再判断它们是不是质数(素数).

Hint 2: Generate palindromes by combining digits properly. You might need more than one of the loops like below.

提示 2: 要产生正确的回文数,你可能需要几个像下面这样的循环。

题目翻译来自NOCOW。

USACO Training Section 1.5

产生长度为5的回文数:

for (d1 = 1; d1 <= 9; d1+=2) { // 只有奇数才会是素数

     for (d2 = 0; d2 <= 9; d2++) {
for (d3 = 0; d3 <= 9; d3++) {
palindrome = 10000*d1 + 1000*d2 +100*d3 + 10*d2 + d1;//(处理回文数...)
}
}
}
如果先判素数,再判断是不是回文数会超时。
因为,很明显,素数比回文数多得多。
代码实现(88):
 1 #include<cstdio>
2 int a,b,c,d,l;
3 char ch[12];
4 bool v[100000010];
5 int main(){
6 scanf("%d%d",&a,&b);
7 for(int i=2;i<=b;i++)
8 if(!v[i]){
9 c=2*i;d=i;l=0;
10 if(i>=a){
11 for(l=0;l<9;l++){
12 ch[l]=d%10+'0';d/=10;
13 if(!d) break;
14 }
15 for(int i=0;i<=l;i++){
16 if(ch[i]!=ch[l-i]) break;
17 if(i==l) printf("%s\n",ch);
18 }
19 }
20 while(c<=b){v[c]=1;c+=i;}
21 }
22 return 0;
23 }
应该先找到满足要求的回文数,而后判断其是否为素数。
代码实现(AC):
 1 #include<cstdio>
2 #include<algorithm>
3 using namespace std;
4 int a,b,c,s;
5 int hw[300000];
6 void find(int x){//find到所有回文数,并存入hw数组。
7 c=s=x;c/=10;
8 while(c){s*=10;s+=c%10;c/=10;}
9 if(s>b) return;
10 if(s>=a) hw[++hw[0]]=s;
11 c=s=x;
12 while(c){s*=10;s+=c%10;c/=10;}
13 if(s>b) return;
14 if(s>=a) hw[++hw[0]]=s;
15 for(int i=0;i<10;i++) find(10*x+i);
16 }
17 int main(){
18 scanf("%d%d",&a,&b);
19 for(int i=1;i<=9;i+=2){
20 s=i;
21 find(i);
22 }
23 sort(hw+1,hw+hw[0]+1);//因为调整回文输入先后太麻烦,所有加了个快排,当然,由于上面的原因,时间上是允许的。
24 for(int i=1;i<=hw[0];i++)
25 for(int j=2;j*j<=hw[i];){
26 if(hw[i]%j==0) break;j++;
27 if(j*j>hw[i]) printf("%d\n",hw[i]);
28 }
29 return 0;
30 }

有点恶心。

题目来源 CODE[VS],洛谷

回文质数 USACO的更多相关文章

  1. 【USACO 1.5.2】回文质数

    [题目描述] 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找出范围[a,b](5 <= a < b <= 100,0 ...

  2. 回文质数 Prime Palindromes

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

  3. P1217 [USACO1.5]回文质数 Prime Palindromes

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

  4. P1217 [USACO1.5]回文质数 Prime Palindromes(求100000000内的回文素数)

    P1217 [USACO1.5]回文质数 Prime Palindromes 题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找 ...

  5. 洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes

    P1217 [USACO1.5]回文质数 Prime Palindromes 题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找 ...

  6. 洛谷 P1217 回文质数

    洛谷 P1217 回文质数 链接 https://www.luogu.org/problem/P1217 题目 题目描述 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 ...

  7. luogu P1217 [USACO1.5]回文质数 Prime Palindromes x

    P1217 [USACO1.5]回文质数 Prime Palindromes 题目描述 因为151既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 151 是回文质数. 写一个程序来找 ...

  8. 洛谷 P1217 [USACO1.5]回文质数 Prime Palindromes【取回文数/数论/字符串】

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

  9. P1217 [USACO1.5]回文质数 Prime Palindromes(stringstream,sizeof(num)/sizeof(num[0]),打表)

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

随机推荐

  1. js 本地存储 localStorage 之 angular

    今天项目中用到 php yii框架 用的不是 angular路由 所以用rootScope传值是不行的 我就用到了 localStorage 本地持久化存储 如下 set 顾名思义是设置 值 loca ...

  2. [App Store Connect帮助]六、测试 Beta 版本(4.3) 管理 Beta 版构建版本:为 Beta 版构建版本提供出口合规证明

    如果您没有完成出口合规证明,则该 Beta 版构建版本的状态为“缺少合规证明”.您可以在 TestFlight 部分中回答必需的出口合规证明问题. 必要职能:“帐户持有人”职能.“管理”职能或“App ...

  3. gitlab&Jenkins 详细介绍及其应用

    第1章 gitlab 1.1 系统环境 [root@jenkins ~]# cat  /etc/redhat-release CentOS Linux release 7.2.1511 (Core) ...

  4. tomcat 参数调优

    JAVA_OPTS="-Xms2g -Xmx2g  -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath= ...

  5. Ajax学习笔记之一----------第一个Ajax Demo[转载]

    原文地址: http://www.cnblogs.com/pjx412/archive/2011/05/04/2037014.html 一.核心推动力:XMLHttpRequest对象XMLHttpR ...

  6. Java 8 (10) CompletableFuture:组合式异步编程

    随着多核处理器的出现,提升应用程序的处理速度最有效的方式就是可以编写出发挥多核能力的软件,我们已经可以通过切分大型的任务,让每个子任务并行运行,使用线程的方式,分支/合并框架(java 7) 和并行流 ...

  7. vscode常好用的插件以及几个快捷操作

    使用方法,可以在官网中搜索需要的插件或者在VsCode的“”扩展“”中搜索需要的插件添加方法使用Ctrl+P, 输入 ext install xxxx ,搜索要安装的插件,点击安装按钮即可(各取所需插 ...

  8. RocketMQ学习笔记(14)----RocketMQ的去重策略

    1. Exactly Only Once (1). 发送消息阶段,不允许发送重复的消息 (2). 消费消息阶段,不允许消费重复的消息. 只有以上两个条件都满足情况下,才能认为消息是“Exactly O ...

  9. 创建一个 Vue 的实例

    每个 Vue 应用都是通过 Vue 函数创建一个新的 Vue 实例开始的: var vm = new Vue({         // 选项 }) 选项:el.data.methods el: 类型: ...

  10. 梦想CAD控件COM接口光栅图处理

    在CAD操作过程中,我们在设计绘图时,光栅图像也就是我们常说的图片,应用非常广泛,在CAD中可以直接插入光栅图像,并且可以对光栅图像进行裁剪.透明度调整等一些操作,在网页可以快速实现我们所需功能. 一 ...