1.题目原文
蒜头君请你帮忙找出正整数 M 和 N 之间(N 不小于 M)的所有真素数。
真素数的定义:如果一个正整数 P 为素数,且其反序也为素数,那么 P 就为真素数。
例如,11,13 均为真素数,因为 11 的反序还是为 11,13 的反序为 31 也为素数。
输入格式
输入两个数 M 和 N,空格间隔,1≤M≤N≤100000。
输出格式
按从小到大输出 M 和 N 之间(包括 M 和 N )的真素数,逗号间隔。如果之间没有真素数,则输出No
。
输出时每行末尾的多余空格,不影响答案正确性
样例输入
10 35
样例输出
11,13,17,31
2.题目分析
遍历从M到N的所有数,将每一个数都转化为字符串,然后得到该字符串的字符数组,最后得到其反序,写一个判断是不是素数的方法,定义一个空字符串,如果这个数的正序和反序都是素数则加入到空字符串中,最后如果字符串为空则一个符合条件的都没有,输出No,否则使用增强for循环输出字符串中的每一个符合条件的值。
3.题解代码
import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int M = scanner.nextInt();
int N = scanner.nextInt();
String str = "";
for (int i = M; i <= N; i++) {
String rrString = i+""; //
char[] temp = rrString.toCharArray();
String res = "";
for (int j = temp.length-1; j >= 0 ; j--) {
res += temp[j];
}
BigInteger rec = new BigInteger(res);
if(compare(i)!=-1&&compare(rec.intValue())!=-1)
str += compare(i)+" ";
}
boolean flag = true;
if (str.equals("")) {
System.out.println("No");
}else {
for (String string : str.split(" ")) {
if(flag) {
System.out.print(string);
flag = false;
}else {
System.out.print(","+string);
}
}
}
}
public static int compare(int cc) {
if((cc+"").length()==1) {
if(cc==2||cc==7||cc==3|cc==5)
return cc;
else return -1;
}
for (int i = 2; i < cc; i++) {
if(cc%i==0) return -1;
}
return cc;
}
}