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. x01.os.17: 换心术

    在 linux 中编译 linux, 于是 linux 便有了再生能力.这不同于自然界的缓慢进化,可用神速来形容.—— 和强大的 windows 相抗衡,便是证明! 我在 ubuntu 中的编译方法如 ...

  2. linux线程同步(4)-自旋锁

    自旋锁与互斥量功能一样,唯一一点不同的就是互斥量阻塞后休眠让出cpu,而自旋锁阻塞后不会让出cpu,会一直忙等待,直到得到锁!!! 自旋锁在用户态使用的比较少,在内核使用的比较多!自旋锁的使用场景:锁 ...

  3. Team Foundation Server 15 功能初探

    1. 系统安装 1.1. 系统需求 新版的TFS的系统要求发生了很大的变化,主要包含: - 不再支持32位的操作系统,只支持64位操作系统 - 只支持SQL 2014和SQL Server 2016, ...

  4. git 学习使用总结三(远程仓库操作)

    这篇文章仅供自己以后翻阅加深记忆,要系统的学习 git 教程(中文版),请移步到 liaoxuefeng.com 学习 git 教程部分. pull, fetch, clone, push, chec ...

  5. USB hacker Collection

    This blog contains some ideas and tricks about USB hacking.

  6. ASP.NET执行模型之IIS服务器处理流程

    之前在网上看过很多对这方面的讲解,但个人觉得看下来过于 "深奥",不容易理解,所以想用更简单的方式进行阐述,便于理解. 本次我们重点分析用户请求到页面呈现过程中Web服务器的处理过 ...

  7. 原生的强大DOM选择器querySelector

    在传统的 JavaScript 开发中,查找 DOM 往往是开发人员遇到的第一个头疼的问题,原生的 JavaScript 所提供的 DOM 选择方法并不多,仅仅局限于通过 tag, name, id ...

  8. 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  9. POJ1014Dividing[多重背包可行性]

    Dividing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 68769   Accepted: 17955 Descri ...

  10. POJ1094[有向环 拓扑排序]

    Sorting It All Out Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 33184   Accepted: 11 ...