心得:
不懂的东西要多百度,要考虑优化问题,看了其他一些大佬的代码才发现自己存在的一些问题,以下附上刚学到的东西:
一、概念:
回文素数是一个既是素数又是回文数的整数。回文素数与记数系统的进位制有关。
回文素数是指,对一个整数n(n≥11)从左向右和从右向左读其结果值相同且是素数,即称n为回文素数。
除了11,偶数位的数不存在回文质数。4位,6位,8位……数不存在回文质数。
最初几个回文素数:11,101,131,151,181,191,313,353,373,383,727,757,787,797,919,929……两位回文素数1个,三位回文素数15个,五位回文素数93个,七位回文素数668个,九位回文素数5172个。
二、当然是代码啦
/*
* 日期:2019.6.29
* 作者:城主
* 题目:[USACO1.5]回文质数 Prime Palindromes
* 思路:用打表方法列出所有回文数,在输入
* 范围之内再判断是不是质数。
* 000,0 1 0,000
*/
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.awt.*;
public class happ {
static boolean isPrime(int num)//判断是否素数
{
int i;
double temp=Math.sqrt(num);
for(i=2;i<=(int)(temp);i++)
{
if(num%i==0)
{
return false;
}
}
return true;
}
static int getlength(int num)//判断长度
{
int n=1;
while(num>9)
{
num/=10;
n++;
}
return n;
}
public static void main(String args[])
{
Scanner scan=new Scanner(System.in);
int a=scan.nextInt();
int b=scan.nextInt();
int p=getlength(a);
int q=getlength(b);
if(p<=1&&q>=1)//1位
{
if(a<=5&&b>=5)
{
System.out.println(5);
}
if(a<=7&&b>=7)
{
System.out.println(7);
}
}
if(p<=2&&q>=2)//2位
{
if(a<=11&&b>=11)
{
System.out.println(11);
}
}
if(p<=3&&q>=3)//3位000
{
int temp;
for(int n1=1;n1<=9;n1+=2)
{
for(int n2=0;n2<=9;n2++)
{
temp=100*n1+n2*10+n1;
if(temp>=a&&temp<=b)
{
if(isPrime(temp))
{
System.out.println(temp);
}
}
}
}
}
if(p<=5&&q>=5)//5位00 0 00
{
int temp;
for(int n1=1;n1<=9;n1+=2)
{
for(int n2=0;n2<=9;n2++)
{
for(int n3=0;n3<=9;n3++)
{
temp=10000*n1+n2*1000+n3*100+n2*10+n1;
if(temp>=a&&temp<=b&&isPrime(temp))
{
System.out.println(temp);
}
}
}
}
}
if(p<=7&&q>=7)//7位000 0 000
{
int temp;
for(int n1=1;n1<=9;n1+=2)
{
for(int n2=0;n2<=9;n2++)
{
for(int n3=0;n3<=9;n3++)
{
for(int n4=0;n4<=9;n4++)
{
temp=1000000*n1+n2*100000+n3*10000+n4*1000+n3*100+n2*10+n1;
if(temp>=a&&temp<=b&&isPrime(temp))
{
System.out.println(temp);
}
}
}
}
}
}
scan.close();
}
}
就这样吧,考试结束了,新一轮的坚持开始启程。