java语言程序设计基础篇——素数(方法)

时间:2022-05-06 23:37:01

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++;
		}
	}
}
java语言程序设计基础篇——素数(方法)

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++;
		}
	}

}
java语言程序设计基础篇——素数(方法)

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++;
		}
	}

}
java语言程序设计基础篇——素数(方法)

4. 双素数

双素数是指一对差值为2的素数。编写程序,找出小于1000的所有双素数,显示结果如下所示:

35

57

①构造方法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]+")");
			}
		}
	}

}
java语言程序设计基础篇——素数(方法)