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]+")");
}
}
}
}