【题目描述】
某古寺的一块石碑上依稀刻着一些神秘的自然数。这些数是由1,3,5,7,9这五个奇数排列组成的5位素数,且同时去掉它的最高位和最低位数字后剩下的3位数还是素数,同时去掉它的高二位与低二位数字后剩下的一位数还是素数,人们把这些神秘的素数称为金蝉素数,寓意金蝉脱壳之后仍为美丽的金蝉。编程找出石碑上的金蝉素数。
【输入描述】
无输入。
【输出描述】
每行输出一个金蝉素数。
【输入样例】
【输出样例】
13597
53791
package self;
public class Galdsushu {
/**
*金蝉素数
*
*
*1.试商检查k是否为素数
*2.应用求余运算对脱壳之后的三位数d应用试商发判定d是否为素数
*3.对于k与d同时为素数是,分离出其中五个数字赋值给数组a,设置二重循环比较
* k是否存在相同数字
*4.检查五个数字中是否有偶数,其中间数字a【3】是否为1-9
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
int k,d=0,t,i,j,a[]=new int[6];
System.out.println("金蝉素数为:");
for(k=10001;k<99999;k+=2)
{
t=0;//素数标准,0代表是素数,1代表不是素数
for(j=3;j<=Math.sqrt(k);j+=2)
if(k%j==0) /* 试商求素数 */
{
t=1;
break;
}
if(t==0) /* k 为 5 位素数 */
{
// a[1]=k%10; //存放k的个位数
// a[5]=k/10000;//存放k的万位数
d=(k/10)%1000;//取出k的中间3位数
for(j=2;j<=Math.sqrt(d);j++)
if(d%j==0) /* 试商求素数 */
{
t=1;
break;
}
}
if(t==0) /* d 为 3 位素数 */
{
a[1]=k%10; //存放k的个位数
a[2]=d%10;//存放d的个位数,也是k的十位数
a[4]=d/100;//存放d的百位数,也是k的千位数
a[3]=(d/10)%10;//存放d的十位数,也是k的百位数
a[5]=k/10000;//存放k的万位数
for(i=1;i<=4;i++) /* 比较确保没有相同数字 */
for(j=i+1;j<=5;j++)
if(a[i]==a[j])
{
t=1;
break;
}
}
if(t==0)
{
for(j=1;j<=5;j++) /* 排除偶数字与中间数字为 1,9 */
if(a[j]%2==0 || a[3]==1 || a[3]==9)
{
t=1;
break;
}
}
if(t==0)
System.out.println(k); /* 输出金蝉素数 */
}
}
}