這題有沒有找到公式真的效能差很多。
新手,傷眼請見諒。
package test;
import java.util.Scanner;
public class Test {
/**
* a121: 質數又來囉
*
* @param args
*/
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while (cin.hasNext()) {
long t1 = System.currentTimeMillis();
int inData = cin.nextInt();
int inData2 = cin.nextInt();
int sum = 0;
for (int i = inData; i <= inData2; i++) {
if (checkPrimeNumber(i)) {
// System.out.println(i);
sum++;
}
}
System.out.println(sum);
long t2 = System.currentTimeMillis();
System.out.println(t2 - t1);
sum = 0;
}
cin.close();
}
// 嘗試從2到開根號N的整數是否整除N。
// 參考如下
// https://tw.answers.yahoo.com/question/index?qid=20070920000016KK09911
// https://zh.wikipedia.org/wiki/%E7%B4%A0%E6%80%A7%E6%B5%8B%E8%AF%95
// http://www.csie.ntnu.edu.tw/~u91029/Prime.html
// 例:判別101是否為質數
// 根號101接近10
// 所以小於10的質數,2、3、5、7如果不能整除101
// 則101為質數
public static boolean checkPrimeNumber(int inData) {
if (inData == 1) {
return false;
} else if (inData == 2 || inData == 3 || inData == 5) {
return true;
}
if (inData % 2 == 0 || inData % 3 == 0 || inData % 5 == 0) {
return false;
}
for (int i = 7; i <= Math.sqrt(inData); i = i + 2) {
if (inData % i == 0) {
return false;
}
}
return true;
}
}