Thursday, April 08, 2004

 

程式--找質數

這個程式可以找出從1到某數範圍內的質數
我和swanky寫的 (swanky:pair programming)
改過後效率還不錯 從1~100000的範圍 大概花了2.157秒
不過也可能是這機器還不賴
大家也可以自己試試看^^~

質數的定義:除了1之外的自然數只能被1或自己整除的數

方法是從2開始找到質數後存入一個陣列
以後的數都拿之前找到的質數來判斷是否整除
除數的範圍就是質數的第一個到比被除數開根號小的質數

ex:要判斷12是不是質數 先開根號取整數+1得4
用找到的質數去除 就是除以2和3結果整除 所以不是質數
但其實只除以2就判斷出他不是質數了

public class DetectPrime{
   public static void main(String[] args){
      long before = System.currentTimeMillis();
      int number = 100;
      if(args.length == 1){
         try{
            number = Integer.parseInt(args[0]);
         }catch(Exception e){
            System.err.println(e);
         }
      }
      int[] primes = new int[number];
      primes[0] = 2;
      int count = 0;
      
      for(int i = 2; i < number; i++){
         
         boolean prime = true;
         int max = (int)Math.sqrt(i) + 1;
         
         for(int j = 0; primes[j] < max; j++){
            if((i % primes[j]) == 0){
               prime = false;
               break;
            }
         }
         
         if((i == 0)||(i == 1)) continue;
         if(prime){
            primes[count] = i;
            System.out.println(i);
            count++;
         }
      }
      long after = System.currentTimeMillis();
      System.out.print("1~" + number + "有" + count +"個質數");
      System.out.print("共花了" + (after-before) + "milliseconds");
   }
}
由 shumi 發表於 April 8, 2004 08:36 AM

Comments: Post a Comment



<< Home