「Java案例」利用方法求反素数
编写方法求求反素数
反素数(Emirp)是素数中一个有趣的变种,它本身是素数,反转后的数字也是素数,并且不能是回文数。
反素数基础实现
编写一个程序,要求编写方法public static boolean isPrime(int num)
判断是否为素数;编写方法public static int reversal(int number)
实现数字倒置;编写方法public static boolean isEmirp(int num)
判断是否为反素数;编写方法public static void showEmirps(int count)
显示前N个反素数。
# 源文件保存为“EmirpNumbers.java”
public class EmirpNumbers {// 判断是否为素数public static boolean isPrime(int num) {if (num <= 1) return false;if (num == 2) return true;if (num % 2 == 0) return false;for (int i = 3; i * i <= num; i += 2) {if (num % i == 0) return false;}return true;}// 数字倒置public static int reversal(int number) {int reversed = 0;while (number != 0) {reversed = reversed * 10 + number % 10;number /= 10;}return reversed;}// 判断是否为反素数public static boolean isEmirp(int num) {int reversed = reversal(num);return num != reversed && isPrime(num) && isPrime(reversed);}// 显示前N个反素数public static void showEmirps(int count) {int found = 0, num = 2;while (found < count) {if (isEmirp(num)) {System.out.printf("%6d", num);if (++found % 10 == 0) System.out.println();}num++;}}public static void main(String[] args) {System.out.println("前30个反素数:");showEmirps(30);}
}
运行结果
前30个反素数:13 17 31 37 71 73 79 97 107 113149 157 167 179 199 311 337 347 359 389701 709 733 739 743 751 761 769 907 937
代码解析:
isPrime
方法通过试除法判断素数,优化了偶数检查reversal
方法通过模运算和整数除法实现数字倒置isEmirp
方法组合前两个方法,并排除回文数情况showEmirps
方法从2开始逐个检查,直到找到足够数量的反素数
变体案例解析
双反素数
编写一个程序,要求编写方法public static boolean isPrime(int num)
判断是否为素数;编写方法public static int reversal(int number)
实现数字倒置;编写方法public static boolean isEmirp(int num)
判断是否为反素数;编写方法public static void showDoubleEmirps(int count)
寻找反转前后都是反素数的特殊数。
# 源文件保存为“EmirpNumbers.java”
public class EmirpNumbers {// 判断是否为素数public static boolean isPrime(int num) {if (num <= 1) return false;if (num == 2) return true;if (num % 2 == 0) return false;for (int i = 3; i * i <= num; i += 2) {if <