BloggerAds

2011年6月11日 星期六

MathTool[一些算數學的函式]

知識+看到拿來做做


 


質數的地方 因頭腦不好 還在想更好的演算法...


========================輸出


MathTool  


========================Main.java


Created with colorer-take5 library. Type 'java'

import java.util.Scanner;


public class Main {


public static void main(String[] args) {//主功能表
MathTool mt=new MathTool();
Scanner sc =new Scanner(System.in);
int SelectItem;
System.out.println("**************************");
System.out.println("*1.求質數 *");
System.out.println("*2.FibonacciSequence數列 *");
System.out.println("*3.算整數陣列第二大值 *");
System.out.println("**************************");
if(sc.hasNextInt()){
SelectItem=sc.nextInt();
switch(SelectItem){
case 1:
System.out.println("請輸入一整數:");
int case1=sc.nextInt();
if(mt.JudgePrime(case1)==true){
System.out.println(case1+"是質數");
}else{
System.out.println(case1+"不是質數");
}
break;
case 2:
System.out.println("請輸入要查詢的第幾項數:");
int case2=sc.nextInt();
System.out.println("FibonacciSequence數列第"+case2+"項為"+mt.FibonacciSequence(case2));
break;
case 3:
System.out.println("請輸入陣列大小:");
int item=sc.nextInt();
int [] iarray=new int [item];
System.out.println("請輸入"+item+"個整數:");
for(int i=0;i<item;i++)
iarray[i]=sc.nextInt();
System.out.println("陣列第二大元素為"+mt.ArraySecondMax(iarray));
break;
default:
System.out.println("請輸入功能表內有的編號");
}
}else{
System.out.println("請輸入數字");
}



}

}





 






========================MathTool.java






Created with colorer-take5 library. Type 'java'

import java.util.TreeSet;


public class MathTool {//MathTool類別
public Boolean JudgePrime(int JudgeValue){//判斷質數回傳true表示是質數,false表示不是
Boolean WhetherPrime=true;

	
if(JudgeValue==1){//1不是質數
WhetherPrime=false;

			return WhetherPrime;
}else
if(JudgeValue%2==0&&JudgeValue!=2){//如果JudgeValue不是2又能被2整除,則不是質數傳回false
WhetherPrime
=false;
return WhetherPrime;
}else if(JudgeValue%3==0&&JudgeValue!=3){//如果JudgeValue不是3又能被3整除,則不是質數傳回false
WhetherPrime
=false;
return WhetherPrime;
}else if(JudgeValue%5==0&&JudgeValue!=5){//如果JudgeValue不是5又能被5整除,則不是質數傳回false
WhetherPrime
=false;
return WhetherPrime;
}else if(JudgeValue%7==0&&JudgeValue!=7){//如果JudgeValue不是7又能被7整除,則不是質數傳回false
WhetherPrime
=false;
return WhetherPrime;
}else{//不是以上情況從11到JudgeValue開根號 去除JudgeValue 可整除不是質數
for(int i=11;i<=(int)Math.ceil(Math.sqrt(JudgeValue));i+=2){
if(JudgeValue%i==0){
WhetherPrime
=false;
return WhetherPrime;
}
}
}
return WhetherPrime;//以上情況都不能整除則是質數 傳回預設值true
}
public int FibonacciSequence(int count){//1,1,2,3,5,8,13....費布納西數列
int Acount1=1;//是放an
int Acount2=1;//是放a(n+1)
int Acount3=1;//是放a(n+2)
int temp2;//放前一次的a(n+2)
int temp1;//放前一次的a(n+1)
for(int i=3;i<=count;i++){
temp2
=Acount3;
temp1
=Acount2;
Acount3
=temp2+temp1;
Acount2
=temp2;
Acount1
=temp1;
}
return Acount3;
}
public int ArraySecondMax(int[] a){//算整數陣列第二大值
TreeSet ts
=new TreeSet();//new一個TreeSet物件ts
for(int i=0;i<a.length;i++)//用迴圈把整數陣列a的每一個值加進ts裡
ts
.add(a[i]);
ts
.remove(ts.last());//移除掉ts最後一個數(最大數)



         //所以現在ts最後一個數就是陣列a的第二大數,把他指派給變數SecondMax
int SecondMax=Integer.parseInt(ts.last().toString());
return SecondMax;//回傳SecondMax
}



}