/*金蝉素数 :
是由1、3、5、7、9这5个奇数排列组成的5位素数,并且同时去掉它的
最高位与最低位数字后得到的3位数还是素数(一次脱壳),同时去掉
它的高2位与低2位数字后得到的1位数还是素数 (二次脱壳)。这个特
征非常有趣,犹如金蝉脱壳之后依然还是金蝉。因此,这些神秘的素数
被人们称为金蝉素数。 */
#include <stdio.h>
#include <math.h>
int p(int);
int f(int);
int main()
{
int n,m;
printf("金蝉素数有:\n");
for(n=13579;n<=97531;n+=2)
{
if(p(n)&&f(n))
{
m=n%10000/10;//一次脱壳
if(p(m))
{
m=m%100/10;//二次脱壳
if(p(m))
printf("%d\n",n);
}}
}
}
//判断一个数是否为素数
int p(int m)
{
int i,t;
t=sqrt(m);
for(i=2;i<=t;i++)
{
if(m%i==0)
return 0;
}
return 1;
}
int f(int n)
{
int t,a[5],i;
for(t=n,i=4;t;t/=10)
a[i--]=t%10;
for(t=0;t<4;t++)//排除有相同数字的数
{
for(i=t+1;i<5;i++)
if(a[t]==a[i]) return 0;
}
for(i=0;i<5;i++) //排除偶数字与中间数字为 1,9
if(a[i]%2==0||a[2]==1||a[2]==9)
return 0;
return 1;
}
神秘的金蝉素数
于 2024-02-21 12:34:17 首次发布