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