四 趣味素數

素數:

素數是指不能被分解的數。除了1和它本身不能被其他數整除的數
求100以內的素數:
運行結果如下:
在這裏插入圖片描述

代碼如下:

public class Ch4_1 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int i;
		for(i=2;i<=100;i++) {
			boolean flag=true;
			for(int j=2;j<=(int)Math.sqrt(i);j++) {
				if(i%j==0) {
					flag=false;
					break;
				}
			}
			if(flag)
				System.out.println(i);
		}
		

	}
	
}

孿生素數:

孿生素數:若兩個素數相差爲2,則這2個素數就是孿生素數
求1-100之內的孿生素數
運行結果如下:
在這裏插入圖片描述
代碼如下:

public class Ch4_2 {
	public static void  main(String[] args) {
		// TODO Auto-generated method stub
		int a[]=new int[100];//利用數組存儲素數
		int n=0;
		for(int i=2;i<=100;i++) {
			boolean flag=true;
			for(int j=2;j<=(int)Math.sqrt(i);j++) {
				if(i%j==0) {
					flag=false;
					break;
				}
			}
			if(flag) {
				a[n]=i;//將素數存儲在數組中
				n++;
			}
		}
		System.out.println("100以內的孿生素數如下:");
		for(int i=0;i<n;i++) {//遍歷數組
			if(a[i+1]-a[i]==2) {
				System.out.print(a[i]+" ");
				System.out.print(a[i+1]+" ");
				System.out.println("\n");
			}
		}
	}
}

可逆素數

可逆素數:一個素數的各位數值順序顛倒後得到的數仍爲素數
編寫程序 找出1-1000之間的可逆素數

運行結果如下:
在這裏插入圖片描述
程序代碼如下:

public class Ch4_3 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		int count=1;
		System.out.println("1000以內的可逆素數如下:");
		for(int i=2;i<=1000;i++) {
			if(isSushu(i)&&isSushu(fanSushu(i)))
				System.out.printf(count++ %7!=0? "%3d ":"%3d \n",i);//滿足條件,格式輸出
		}

	}
	//是素數
	public static boolean isSushu(int n) {
		boolean isSushu=true;
		if(n==1 ||n==2)
			return true;
		for(int i=2;i<Math.sqrt(n);i++) {
			if(n%i==0)
				return false;
		}
		if(isSushu==true) {
			return true;
		}
		else
			return false;
	}
	//反素數
	public static int fanSushu(int n) {
		//getBitCount(求數n的長度)
		int len = getBitCount(n);
		int s=0;
		for(int i=1;i<=len;i++) {
			//getBit(n,i)求數n的第i位上的數字
			s+=Math.pow(10, len-i)* getBit(n,i);//每一位乘以權值累加
		}
		return s;
		
	}
	//獲取一個數的位數
	private static int getBitCount(int n) {
		// TODO Auto-generated method stub
		int i=1;
		while(n / 10 > 0) {//循環直到0爲止
			i++;//計數器加一
			n /= 10;//截斷最後一位
		}
		return i;//返回長度
	}
	//獲取N位數第i位
	private static int getBit(int num, int i) {
		// TODO Auto-generated method stub
		if(i>getBitCount(num)|| i<1) {
			return -1;
		}
		return (num % ((int) Math.pow(10, i))/(int)Math.pow(10, i-1));
	}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章