1217: VIJOS-P1042

时间限制: 0 Sec  内存限制: 128 MB

提交: 78  解决: 29

[提交][状态][讨论版]

题目描述

        有一天,雄霸传授本人风神腿法第一式:捕风捉影..............的步法(弟子一:堂主,你大喘气呀。风:你给我闭嘴。)捕风捉影的关键是换气(换不好就会大喘气...)。         使用捕风捉影这一招时并不是每一步都喘气,而是在特定的步数喘气。一般来说功力越高,喘气越稀疏。喘气的步数符合特定规律:第一要是SUSHU(弟子二:哇塞!堂主,你还会鸟语,我好好崇拜你呦!可是SUSHU是什么意思呢?风:笨蛋,那是汉语拼音!)第二要是一个回文数,回文数就是正反念一样的数,如:123321,121,5211314(弟子三:堂主,最后一个好象不是...风:废话,当然不是了,我是考察一下你们的纠错能力!)现在给出两个数M,N(5<
=M< N< =100,000,000),你要算出M,N之间需要换气的都有哪几步。(包括M,N)。算出来的可以提升为本堂一级弟子,月薪(1000000000000000000000000000000000000000000  MOD  10  )元。

输入

两个整数M,N。用空格隔开。

输出

在M,N之间的换气点,每个一行。

样例输入

100 500

样例输出

101
131
151
181
191
313
353
373
383

#include<stdio.h>
#include<string.h>
int prime[4000];
int psize;
int from, to;
void getPrime(){
	memset(prime, 0, sizeof(prime));
	psize = 0;
	int i,j;
	bool a[10000];
	memset(a, -1, sizeof(a));
	for (i = 2; i < 10000; i++){
		if (!a[i])continue;
		prime[psize++] = i;
		for (j = i + i; j < 10000; j+=i)a[j] = false;
	}
}
bool isPrime(int n){
	int i;
	for (i = 0;prime[i]*prime[i]<=n; i++)if (n%prime[i] == 0)return false;
	return true;
}
void one(){
	if (from>7)return;
	if (from == 5)printf("5\n");
	printf("7\n");
}
void three(){
	if (from > 999)return;
	int i, j,k;
	int a[4] = { 1, 3, 7, 9 };
	for (i = 0; i < 4;i++)
	for (j = 0; j < 10; j++){
		k = a[i] * 100 + j * 10 + a[i];
		if ( k< from)continue;
		if (k>to)return;
		if (isPrime(k))printf("%d%d%d\n", a[i], j,a[ i]);
	}
}
void five(){
	if (from>99999)return;
	int a[4] = { 1, 3, 7, 9 };
	int i, j, k, l;
	for (i = 0; i < 4;i++)
	for (j = 0; j < 10;j++)
	for (k = 0; k < 10; k++){
		l = a[i] * 10000 + j * 1000 + k * 100 + j * 10 + a[i];
		if (l<from)continue;
		if (l>to)return;
		if (isPrime(l))printf("%d%d%d%d%d\n", a[i], j, k, j, a[i] );
	}
}
void seven(){
	if (from>9999999)return;
	int a[4] = { 1, 3, 7, 9 };
	int i, j, k, l,m;
	for (i = 0; i < 4; i++)
	for (j = 0; j < 10; j++)
	for (k = 0; k < 10; k++)
	for(m=0;m<10;m++){
		l = a[i] * 1000000 + j * 100000 + k * 10000 + m * 1000 +k*100+j*10+ a[i];
		if (l<from)continue;
		if (l>to)return;
		if (isPrime(l))printf("%d%d%d%d%d%d%d\n", a[i], j, k,m,k, j, a[i]);
	}
}
int main(){
	getPrime();
	prime[psize++]=10001;
	scanf("%d%d", &from, &to);
	one();
	if (11 >= from && 11 <= to)printf("11\n");
	three(); five(); seven();
	return 0;
}


上面这个5ms

再慢一点的算法:6311ms

#include<stdio.h>
#include<string.h>
#include<math.h>
int prime[4000];
int psize;
int from, to;
void getPrime(){
	memset(prime, 0, sizeof(prime));
	psize = 0;
	int i,j;
	bool a[10000];
	memset(a, -1, sizeof(a));
	for (i = 2; i < 10000; i++){
		if (!a[i])continue;
		prime[psize++] = i;
		for (j = i + i; j < 10000; j+=i)a[j] = false;
	}
}
bool isPrime(int n){
	int i;
	for (i = 0;prime[i]*prime[i]<=n; i++)if (n%prime[i] == 0)return false;
	return true;
}
bool isHuiwen(int n,int wei){
	if (wei == 0||wei==1)return true;
	int i;
	if (n /(int) pow((double)10, wei-1) == n % 10){
		n %= (int)pow((double)10, wei-1);
		n /= 10;
		if (isHuiwen(n, wei - 2))return true;
	}
	return false;
}
int main(){
	getPrime();
	prime[psize++]=10001;
	scanf("%d%d", &from, &to);
	if (from == 5)printf("5\n");
	if (from <= 7 && to >= 7)printf("7\n");
	if (11 >= from && 11 <= to)printf("11\n");
	if (from < 100)from = 101;
	for (; from <= to; from++){
		int wei = log10((double)from)+1;
		if (wei % 2 == 0){
			from = pow((double)10, wei);
			wei++;
			if (from>to)break;
		}
		if (isPrime(from) && isHuiwen(from,wei))
			printf("%d\n", from);
	}
	return 0;
}

最慢42805ms

#include<stdio.h>
#include<string.h>
#include<math.h>
int prime[4000];
int psize;
int from, to;
void getPrime(){
	memset(prime, 0, sizeof(prime));
	psize = 0;
	int i,j;
	bool a[10000];
	memset(a, -1, sizeof(a));
	for (i = 2; i < 10000; i++){
		if (!a[i])continue;
		prime[psize++] = i;
		for (j = i + i; j < 10000; j+=i)a[j] = false;
	}
}
bool isPrime(int n){
	int i;
	for (i = 0;prime[i]*prime[i]<=n; i++)if (n%prime[i] == 0)return false;
	return true;
}
bool isHuiwen(int n,int wei){
	if (wei == 0||wei==1)return true;
	int i;
	if (n /(int) pow((double)10, wei-1) == n % 10){
		n %= (int)pow((double)10, wei-1);
		n /= 10;
		if (isHuiwen(n, wei - 2))return true;
	}
	return false;
}
int main(){
	getPrime();
	prime[psize++]=10001;
	scanf("%d%d", &from, &to);
	if (from == 5)printf("5\n");
	if (from <= 7 && to >= 7)printf("7\n");
	if (11 >= from && 11 <= to)printf("11\n");
	if (from < 100)from = 101;
	for (; from <= to; from++){
		if (isPrime(from) && isHuiwen(from,log10((double)from)+1))
			printf("%d\n", from);
	}
	return 0;
}

东大OJ-5到100000000之间的回文质数的更多相关文章

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

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

  2. 回文质数 USACO

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 因为 151 既是一个质数又是一个回文数(从左到右和从右到左是看一样的),所以 15 ...

  3. 洛谷 P1217 回文质数

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

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

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

  5. 【USACO 1.5.2】回文质数

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

  6. 回文质数 Prime Palindromes

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

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

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

  8. [USACO1.5] 回文质数

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

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

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

随机推荐

  1. 描述Linux运行级别的0-6的各自含义(计时1分钟)

    中文: 0:关机 1:单用户模式 2:无网络支持的多用户模式 3:有网络支持的多用户模式(文本模式,工作中最常使用的模式) 4:保留,未使用 5:有网络支持有X-Window支持的多用户模式 6:重新 ...

  2. Android Paint类方法说明

    * Paint类介绍 * * Paint即画笔,在绘图过程中起到了极其重要的作用,画笔主要保存了颜色, * 样式等绘制信息,指定了如何绘制文本和图形,画笔对象有很多设置方法, * 大体上可以分为两类, ...

  3. linux基础-基本命令的讲解(1-7单元)

    基本命令的讲解 主要内容介绍 1.LINUX操作系统安装及初始化配置(熟悉):2.LINUX操作系统目录组成结构及文件级增删改查操作(重点):3.LINUX操作系统用户.权限管理(重点):4.开源软件 ...

  4. Web报表页面如何传递中文参数

    1.场景描述 在用报表开发工具FineReport设计的web报表中,给iframe设置src嵌入某个报表时,往往会给报表传递初始的参数值,例如: <iframe id="report ...

  5. PHP&MySQL(二)——困也得啃书

    madan,所有事情都敢赶在一起...以后每天中午去学车啊,好开心..晚上好困,但是困也得啃书........ 二.PHP脚本编程语言 什么变量啊,数据类型啊,特别特别基本的不记录了,说点容易忽略的. ...

  6. AC日记——字符串的展开 openjudge 1.7 35

    35:字符串的展开 总时间限制:  1000ms 内存限制:  65536kB 描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h ...

  7. USB Type-C 接口有什么优点?

    USB Type-C 接口有什么优点? 提到USB Type-C接口(以下简称为USB-C),大家第一个能想到的是USB-C接口能正反插,用起来很舒服.了解更多的可能还支持USB-C接口速度更快, 达 ...

  8. java io (一)

    对于文件内容的操作主要分为两大类 分别是:字符流 字节流 其中,字符流有两个抽象类:Writer   Reader 其对应子类FileWriter和FileReader可实现文件的读写操作 Buffe ...

  9. oracle基本用法

    作为企业版的后台数据支撑,就首先要掌握oracle的使用方法!!! 注册用户之前,需要使用system管理员来进行注册功能!!! 1.首先创建新用户 2.这样就能使创建的新用户能够登陆吗?不,还需要分 ...

  10. [No000060]冷读热读:读书九问

    兵无常势,水无常形,读书亦无法.彼之砒霜,我之佳肴.然读书无法却有道.你我都是使用同一颗大脑在读书.这颗大脑受制于那千千万万年以来,星辰起落,狩猎采集,演化大道. Q1:读物如何分级? 坏书.可用的书 ...