CodeForces 171F(千古神题。。)



D - 乐

Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d
& %I64u

Submit Status Practice CodeForces
171F

Description

qd ucyhf yi q fhycu dkcruh mxeiu huluhiu yi q tyvvuhudj fhycu dkcruh. oekh jqia yi je vydt jxu djx ucyhf.

Input

jxu ydfkj sediyiji ev q iydwbu ydjuwuh d (1?≤?d?≤?11184) — jxu edu-rqiut ydtun ev jxu ucyhf je vydt.

Output

ekjfkj q iydwbu dkcruh.

Sample Input

Input

1

Output

13

神题神题啊。。

是不是感觉看不懂题目。。。

是不是感觉题目出问题了。。

其实题目本身就是一个密码。。

密码规则就是(字母+10)。

q是第17个字母,则应该减16,变成a。

OK,所以先写一个程序,把题意先弄懂。

如下:

题意:

让你求第n个反素数。(n最大为11184)

反素数(反转之后还是素数,并且不等于原来那个数)。

比如13 反转31 还是素数。

13 是第一个反素数。

解题思路:

先打表确定第11184个反素数是多少。

然后循环开到比它大一点就不会超时了。

可只所求范围内的最大反素数是999983

数组开到一百万。

代码:

#include <stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
__int64 prime[10000];
__int64 a[1222222];
__int64 sushu(__int64 a)
{
	__int64 i;
	__int64 k=sqrt(a);
	for(i=2;i<=k;i++)
	{
		if(a%i==0)
			return 0;
	}
	return 1;  //判断素数
}
__int64 rev( __int64 sum )
{
	__int64 now = 0;
	while (sum)
	{
		now *= 10;
		now += sum%10;
		sum /= 10;
	}
	return now;  //反转
}
int main()
{
	__int64 i,j;
	__int64 n;
	__int64 l,l1;
	l=0;
	l1=1;
	/*
	for(i=1;i<1020022;i++)
	{
	if(sushu(i))
	{
	prime[l++]=i;
	printf("%I64d\n",i);
	}
	}
	*/   //没用的注释掉
	for(i=0;i<1000000;i++)
	{
		if(i!=rev(i)&&sushu(rev(i)) &&sushu(i))
		{
			a[l1++]=i;
			//	printf("%d\n",i);
		}
	}
	while(scanf("%I64d",&n)!=EOF)
	{
		printf("%I64d\n",a[n]);
	}
	return 0;
}
时间: 2024-10-14 00:00:45

CodeForces 171F(千古神题。。)的相关文章

CodeForces 26C Parquet 构造题

题目链接:点击打开链接 #include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> #include <math.h> #include <set> using namespace std; #define N 105 int n,m,a,b,c; char s[N][N]; set<char>myset; bool inm

UVALive 4487 Exclusive-OR 加权并查集神题

已知有 x[0-(n-1)],但是不知道具体的值,题目给定的信息 只有 I P V,说明 Xp=V,或者 I P Q V,说明 Xp ^ Xq=v,然后要求回答每个询问,询问的是 某任意的序列值 Xp1^Xp2,,,,X^pk 这个题目用加权并查集是这么处理的: 1. f[]照样是代表父节点,照样进行路径压缩,把每个 V[i]=V[i]^V[f[i]],即节点存储的值实际是它与它父亲的异或的值.为什么要这样呢,因为异或首先满足交换律,而且异或同一个数偶数次,即相当于本身,那么这个题目的其中一个要

POJ 2484 A Funny Game(神题!)

一开始看这道博弈题的时候我就用很常规的思路去分析了,首先先手取1或者2个coin后都会使剩下的coin变成线性排列的长条,然后无论双方如何操作都是把该线条分解为若干个子线条而已,即分解为若干个子游戏而已,我想起刘汝佳的大白书上有类似的例题(不过复杂好多),于是便用同样的方法去做了,以sg(x)表示当前连续x个coin的状态的sg函数值,则当从左侧起分别取一个或相邻的两个时,不难得出其后继状态:sg(y)^sg(x-1-y)(0<=y<=(x-1)/2),sg(y)^sg(x-2-y)(0<

POJ 2828 Buy Tickets(神题!线段树or树状数组)

题目链接:POJ 2828 Buy Tickets [题意]给了你 n(1<=n<=200000)个人的插队信息,让你输出最终的队列的排列 [思路]常规思考的话,这道题就是模拟,但是时间复杂度一定会很高.POJ的discuss上说这道题是神题,难得不是用什么数据结构,而是思路,这道题要逆向去思考,从最后一个人往前看,后插进来的人更容易定位,他一定能站到他想的位置,并且不会在挪动.再前一个人呢?他的位置即是接下来的空位的编号.于是有线段树用于维护位置信息.当然用树状数组也是可以做的,但是要加上二

Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 177  Solved: 128[Submit][Status][Discuss] Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = 4+1+1 7 = 4+1+1+1 8无法表示为集合S的子集的

HDOJ Guess the number 3337【神题-抓取杭电后台输出数据】

Guess the number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 7077    Accepted Submission(s): 1626 Problem Description AekdyCoin is the most powerful boy in the group ACM_DIY, whose signatur

CodeForces 20B Equation 水题

题目链接:点击打开链接 #include <cstdio> #include <cstring> #include <algorithm> #include <vector> #include <iostream> #include <map> #include <set> #include <math.h> using namespace std; #define inf 10000000 #define l

【CF913F】Strongly Connected Tournament 概率神题

[CF913F]Strongly Connected Tournament 题意:有n个人进行如下锦标赛: 1.所有人都和所有其他的人进行一场比赛,其中标号为i的人打赢标号为j的人(i<j)的概率为$p=a\over b$.2.经过过程1后我们相当于得到了一张竞赛图,将图中所有强联通分量缩到一起,可以得到一个链,然后对每个大小>1的强联通分量重复过程1.3.当没有大小>1的强连通分量时锦标赛结束. 现在给出n,a,b,求期望比赛的场数. $n\le 2000,a<b\le 1000

【Codeforces 98E】 Help Shrek and Donkey 游戏策略神题

from http://www.cnblogs.com/MashiroSky/p/6576398.html A君有n张牌,B君有m张牌,桌上还有一张反扣着的牌,每张牌都不一样. 每个回合可以做两件事中的一件 猜测桌上的牌是什么,猜对则胜,猜败则输. 询问对方是否有某张牌,若有则需要将其示出,否则继续游戏. A和B都很聪明,问A的胜率. Solution 首先不到最后一刻是不会选择猜桌上的牌的. 假如某一次对方问了一张自己手上没有的牌,就可能会怀疑桌上的牌就是这张. 而询问对方是否有某张牌,我们可