2013年6月27日 星期四

計算質數的作法

當初就有打算在工作一段時間後,

要回去看以前自己寫的高中生解題,

實在蠻汗顏的,

以前的我會這樣寫,

for(int i=1;i<=b;i++){
 time=0;
 for(int j=1;j<=i;j++){
  if(i%j==0){
   time++;
   if(time>2){
    break;
   }else if(j==i){
    System.out.println(i+" ");
   }
  }
 }
}



有興趣的人可以執行看看,

當你把b代100000進去,需要等一會,

而我現在會這樣寫,

package com.portal.test;

import java.util.Scanner;

public class TestOdd {
 public static void count(int number){
  for(int i=1;i<=number;i++){
   testOdd(i);
  }
 }
 public static void testOdd(int number){
  int last=(int)Math.sqrt(number);
  int time=0;
  for(int i=1;i<=last;i++){
   if(number%i==0){
    time++;
    if(time>=2){
     break;
    }
   }
  }
  if(time<2){
   System.out.println(number+" ");
  }
 }
 public static void main(String[] args) {
  System.out.println("請輸入數字");
  Scanner scan=new Scanner(System.in);
  int a=scan.nextInt();
  long start=System.currentTimeMillis();
  count(a);
  long end=System.currentTimeMillis();
  System.out.println("共使用了"+(end-start)+"毫秒");
 }
}

當你輸入100000進去,

結果是2XX毫秒,

邏輯在經過訓練之後有顯著差異了...

沒有留言:

張貼留言