1. 回文素数
回文素数是指一个数同时为素数和回文数。编写程序,显示前100个回文素数,每行显示10个数并且准确对齐。
①构造方法boolean isPrime(int number)判断一个数是否为素数,若是则返回true,若不是,则返回false
②构造方法boolean isPalindrome(int number)判断一个数是否是回文数,若是则返回true,若不是则返回false
③若同时满足isPrime(number)&&isPalindrome(number),则该数字为回文素数,按要求输出
public class Exercise5_26 { private static boolean isPrime(int number){ for(int divisor = 2;divisor <= number/2;divisor++){ if(number % divisor == 0){ return false; } } return true; } private static boolean isPalindrome(int number){ String str = String.valueOf(number); StringBuilder s = new StringBuilder(str); s.reverse(); String f = new String(s); if(f.equals(str)){ return true; } return false; } public static void main(String[] args){ int count = 0; int number = 2; while(count < 100){ if(isPrime(number)&&isPalindrome(number)){ count++; if(count%10==0){ System.out.printf("%5d",number); System.out.println(); }else{ System.out.printf("%5d",number); System.out.print(" "); } } number++; } } }
2. 反素数
反素数(逆向拼写的素数)是指一个数将其逆向之后也是一个素数的非回文素数。编写程序,显示前100个反素数,每行显示10个,并且准确对齐。
①构造方法boolean isPrime(int number)判断一个数是否为素数,若是则返回true,若不是,则返回false
②构造方法int reverse(int number)将一个数各个位上的数字逆序,输出新组成的数。
③构造方法boolean isPalindrome(int number)判断一个数是否是回文数
④若同时满足isPrime(number)&&isPrime(reverse(number))&&!isPalindrome(number),则该数字为反素数,按要求输出
public class Exercise5_27 { private static boolean isPrime(int number){ for(int divisor = 2;divisor <= number/2;divisor++){ if(number % divisor == 0){ return false; } } return true; } private static int reverse(int number){ String str = String.valueOf(number); StringBuilder s = new StringBuilder(str); s.reverse(); String f = new String(s); return Integer.parseInt(f); } private static boolean isPalindrome(int number){ return reverse(number) == number; } public static void main(String[] args){ int count = 0; int number = 2; while(count < 100){ if(isPrime(number)&&isPrime(reverse(number))){ if(!isPalindrome(number)){ count++; if(count%10==0){ System.out.printf("%4d",number); System.out.println(); }else{ System.out.printf("%4d",number); System.out.print(" "); } } } number++; } } }
3. 梅森素数
如果一个素数可以写成2p-1的形式,其中p是某个正整数,那么这个素数就称作梅森素数。编写程序,找出p≤31的所有梅森素数,然后显示如下的输出结果:
p 2p-1
2 3
3 7
5 31
①构造方法boolean isPrime(int number)判断一个数是否为素数,若是则返回true,若不是,则返回false
②取p的初值为2.0,判断从2至31对应的number = Math.pow(2, p)-1是否为素数
③若满足isPrime(number),则该数字为梅森素数,按要求输出
public class Exercise5_28 { private static boolean isPrime(double number){ for(int divisor = 2;divisor <= number/2;divisor++){ if(number % divisor == 0){ return false; } } return true; } public static void main(String[] args){ System.out.println(" p"+" "+"2^p - 1"); double p = 2.0; while(p <= 31){ double number = Math.pow(2, p)-1; if(isPrime(number)){ System.out.printf("%2d",(int)p); System.out.print(" "); System.out.printf("%10d",(int)number); System.out.println(""); } p++; } } }
4. 双素数
双素数是指一对差值为2的素数。编写程序,找出小于1000的所有双素数,显示结果如下所示:
(3,5)
(5,7)
…
①构造方法boolean isPrime(int number)判断一个数是否为素数,若是则返回true,若不是,则返回false
②将满足isPrime(number)的数,即素数依次存储进数组,将数组中前后相邻两个元素做差,判断是否为2。若等于2,则这两个元素为双素数,按照要求输出
public class Exercise5_30 { private static boolean isPrime(int number){ for(int divisor = 2;divisor <= number/2;divisor++){ if(number % divisor == 0){ return false; } } return true; } public static void main(String[] args){ int number = 2; int i = 0; int []f = new int[1000]; while(number < 1000){ if(isPrime(number)){ f[i] = number; i++; } number++; } for(int j=0;j<=1000;j++){ if(f[j+1]-f[j] == 2){ System.out.println("("+f[j]+","+f[j+1]+")"); } } } }