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
Input1Output
13
神題神題啊。。
是不是感覺看不懂題目。。。
是不是感覺題目出問題了。。
其實題目本身就是一個密碼。。
密碼規則就是(字母+10)。
q是第17個字母,則應該減16,變成a。
OK,所以先寫一個程序,把題意先弄懂。
如下:
題意:
讓你求第n個反素數。(n最大為11184)
反素數(反轉之後還是素數,並且不等於原來那個數)。
比如13 反轉31 還是素數。
13 是第一個反素數。
解題思路:
先打表確定第11184個反素數是多少。
然後循環開到比它大一點就不會超時了。
可只所求范圍內的最大反素數是999983
數組開到一百萬。
代碼:
#include#include #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; //判斷素數 } __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; }