題目:計算比n大,的位數相同的字謎素數(本身和反轉后都是素數的數字)。
分析:數論,打表。打表計算出所有的字謎素數(22个),查找输出。
說明:╮(╯▽╰)╭。
#include <cstring>
#include <cstdio>
/*
int prime[1000001];
int visit[10000001];
int digit[11];
int biger(int value)
{
for (int i = 9; i >= 0; -- i)
digit[i] = 0;
while (value) {
digit[value%10] ++;
value /= 10;
}
int ans = 0;
for (int i = 9; i >= 0; -- i)
while (digit[i]) {
ans = ans*10+i;
digit[i] --;
}
return ans;
}
int makelist()
{
memset(visit, 0, sizeof(visit));
visit[0] = visit[1] = 1;
for (int i = 2; i < 10000001; ++ i)
if (!visit[i]) {
for (int j = i+i; j < 10000001; j += i)
visit[j] = 1;
}
for (int i = 2; i < 10000001; ++ i)
if (visit[i] && !visit[biger(i)])
visit[biger(i)] = 1;
for (int i = 2; i < 10000001; ++ i)
if (!visit[i] && visit[biger(i)])
visit[i] = 1;
int count = 0;
for (int i = 2; i < 10000001; ++ i)
if (!visit[i])
prime[count ++] = i;
return count;
}
*/
int main()
{
int list[22] = {2, 3, 5, 7, 11, 13, 17, 31, 37, 71, 73, 79, 97,
113, 131, 199, 311, 337, 373, 733, 919, 991};
int n;
while (~scanf("%d",&n) && n) {
int m = n, u = 1, flag = 1;
while (m) {
u *= 10;
m /= 10;
}
for (int i = 0; i < 22; ++ i)
if (list[i] > n && list[i] < u) {
printf("%d\n",list[i]);
flag = 0;
break;
}
if (flag) puts("0");
}
return 0;
}