回文素数的定义是:一个整数或者字符串,从前往后读和从后往前读是一样的。
整数回文素数一些例子包括:
121
12321
1001
12344321
代码示例:
public class PalindromePrimeNumber {
public static void main(String[] args) {
// 打印 1000 以内的回文素数
printPalindromePrimes(1000);
}
/**
* 打印指定范围内的回文素数
* @param limit 上限值
*/
public static void printPalindromePrimes(int limit) {
// 遍历从 2 到 limit-1 的所有数字
for (int i = 2; i < limit; i++) {
// 如果当前数字是质数并且是回文数,则打印出来
if (isPrime(i) && isPalindrome(i)) {
System.out.println(i);
}
}
}
/**
* 判断一个数字是否为质数
* @param num 待判断的数字
* @return 是否为质数
*/
private static boolean isPrime(int num) {
// 1 和负数都不是质数
if (num <= 1) {
return false;
}
// 遍历 2 到 num 的平方根之间的所有数字
// 如果有可以整除 num 的数字,则 num 不是质数
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
// 否则 num 是质数
return true;
}
/**
* 判断一个数字是否为回文数
* @param num 待判断的数字
* @return 是否为回文数
*/
private static boolean isPalindrome(int num) {
// 将数字转换为字符串
String numStr = String.valueOf(num);
// 使用两个指针,一个从左往右,一个从右往左遍历字符串
// 如果对应位置的字符不相同,则不是回文数
int left = 0, right = numStr.length() - 1;
while (left < right) {
if (numStr.charAt(left) != numStr.charAt(right)) {
return false;
}
left++;
right--;
}
// 遍历完成后,说明是回文数
return true;
}
}
这个代码实现了一个打印 1000 以内回文素数的算法,主要包含以下几个部分:
printPalindromePrimes 方法负责遍历指定范围内的所有数字,并打印出满足质数和回文素数条件的数字。
isPrime 方法用于判断一个数字是否为质数。
isPalindrome 方法用于判断一个数字是否为回文素数。
每个方法都添加了详细的注释,说明了它们的作用和实现原理。这有助于增强代码的可读性和可维护性。