演算法趣題(Java隨筆)—數學系列
阿新 • • 發佈:2018-12-13
目錄
一、判斷閏年
四年一閏,百年不閏,四百年再閏;
//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...
未完......