要回去看以前自己寫的高中生解題,
實在蠻汗顏的,
以前的我會這樣寫,
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毫秒,
邏輯在經過訓練之後有顯著差異了...
沒有留言:
張貼留言