D - 樂Time Limit:2000MSMemory Limit:65536KB64bit IO Format:%I64d & %I64uSubmit 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 ydjuwuhd(1?≤?d?≤?11184) — jxu edu-rqiut ydtun ev jxu ucyhf je vydt.
Output
ekjfkj q iydwbu dkcruh.
Sample Input
Input1Output
13
神題神題啊,
CodeForces 171F(千古神題。。)
。。是不是感覺看不懂題目。。。
是不是感覺題目出問題了。。
其實題目本身就是一個密碼。。
密碼規(guī)則就是(字母+10)。
q是第17個字母,則應該減16,變成a。
OK,所以先寫一個程序,把題意先弄懂。
如下:
題意:
讓你求第n個反素數(shù),
電腦資料
《CodeForces 171F(千古神題。。)》(http://www.oriental01.com)。(n最大為11184)反素數(shù)(反轉(zhuǎn)之后還是素數(shù),并且不等于原來那個數(shù))。
比如13 反轉(zhuǎn)31 還是素數(shù)。
13 是第一個反素數(shù)。
解題思路:
先打表確定第11184個反素數(shù)是多少。
然后循環(huán)開到比它大一點就不會超時了。
可只所求范圍內(nèi)的最大反素數(shù)是999983
數(shù)組開到一百萬。
代碼:
#include<stdio.h>#include<math.h>#include 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; //判斷素數(shù)}__int64 rev( __int64 sum ){ __int64 now = 0; while (sum) { now *= 10; now += sum%10; sum /= 10; } return now; //反轉(zhuǎn)}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;}