1. 程式人生 > >演算法趣題(Java隨筆)—數學系列

演算法趣題(Java隨筆)—數學系列

目錄

一、判斷閏年

四年一閏,百年不閏,四百年再閏;

//1、判斷閏年
	static boolean isLeapYear(int year){
		if((year%4==0)&&(year%100!=0)||(year%400==0)){
			return true;
		}
		return false;
	}

執行測試:

// 1、判斷閏年(main方法中執行)
		System.out.println(isLeapYear(2008) ? "2008是閏年" : "2008不是閏年");
		System.out.println(isLeapYear(2018) ? "2018是閏年" : "2018不是閏年");

執行結果:
2008是閏年
2018不是閏年

二、矩陣乘積

矩陣A和B的乘積C滿足C=A*B!=B*A;且要求A的行數必須等於B的列數,如:

//2、求矩陣積
	/*
	 * 二維陣列data1的行數必須等於data2的列數
	 */
	static int[][] matrixMul(int[][] data1,int[][] data2){
		int[][] data=new int[data1.length][data1.length];
		for(int i=0;i<data1.length;i++){
			for(int j=0;j<data1.length;j++){
				data[i][j]=0;
				for(int k=0;k<data2.length;k++){
					data[i][j]+=(data1[i][k]*data2[k][j]);
				}
			}
		}
		return data;
	}

執行測試:

// 2、矩陣乘積(main方法中執行)
		int[][] data1 = { { 1, 2, 3, 5 }
						, { 4, 5, 6, 9 }
						, { 4, 5, 6, 9 } };
		int[][] data2 = { { 3, 6, 3 }
						, { 2, 5, 5 }
						, { 1, 4, 8 }
						, { 4, 5, 3 } };
		int[][] data = matrixMul(data1, data2);
		for (int[] i : data) {
			for (int j : i) {
				System.out.print(j + "\t");
			}
			System.out.println();
		}

執行結果:
30	53	52	
64	118	112	
64	118	112

三、哥德巴赫猜想

——任意一個大於二的偶數都可以寫為兩個素數之和

//哥德巴赫猜想
	//1、判斷是否為素數
	static boolean isSuShu(int n){
		for(int i=2;i<n/2;i++){
			if(n%i==0){
				return false;
			}
		}
		return true;
	}
	//2、判斷是否滿足哥德巴赫猜想
	static boolean isGeDe(int i){
		if(i<=2||i%2!=0){//不是大於2的偶數
			return false;
		}else{
			for(int j=2;j<=i/2;j++){
				if(isSuShu(j)&&isSuShu(i-j)){
					return true;
				}
			}
		}
		return false;
	}

執行測試:

//3、哥德巴赫猜想(main方法中執行)
	for(int i=4;i<101;i+=2){
		System.out.print(isGeDe(i)+" ");
	}

執行結果:
true true true true true true true true...

未完......