可逆素数是指将一个素数的各位数字顺序地倒过来构成的反序数仍然是素数,请问按以上叙述所有的四位素数有哪些。
采用逐位提取数字的方法即对这个四位数采用“%”或“/”的方法分解出每位上的数字。在对重新组合的数字进行判断看是否是素数,并判断是否大于原来的四位数,为了防止重复输出例如1031与1301互可逆素数,这里只输出1031即可,1301不必输出
int ss(int i) /自定义函数判断是否为素数 /
{
int j;
if (i <= 1) /小于1的数不是素数 /
return 0;
if (i == 2) /2是素数 /
return 1;
for (j = 2; j < i; j++) /对大于2的数进行判断 /
{
if (i % j == 0)
return 0;
else if (i != j + 1)
continue;
else
return 1;
}
}
void main()
{
int i, n = 0, n1, n2, n3, n4;
for (i = 1000; i < 10000; i++)
if (ss(i) == 1)
{
n4 = i % 10; /取个位数 /
n3 = (i % 100) / 10; /取十位数 /
n2 = (i / 100) % 10; /取千位数 /
n1 = i / 1000; /取万位数 /
if (ss(1000 * n4 + 100 * n3 + 10 * n2 + n1) == 1 && 1000 * n4 + 100 * n3
- 10 * n2 + n1 > i) /根据条件判断 /
{
printf("%d,", i);
n++; /记录个数 /
if (n % 10 == 0) /10个数一换行 /
printf("\n");
}
}
}