求質數的算法
比如,求10 000 000中有多少個質數
質數是隻能被1和自己整除的自然數(不包括1)。
笨辦法就是一個個計算,用到兩層嵌套的循環,數字一大算死人,代碼如下:
public class PrimeNumbers {
public static void main(String[] args) {
final int max = 100;
int count = 0;
boolean flag = true;
for (int i = 2; i <= max; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
break;
}
flag = true;
}
if (flag) {
count++;
}
}
System.out.println("質數數是:" + count);
}
}
那麼如果不是質數,這個數就是合數,合數的最小因數小於它的平方根。
好了,聰明一點的辦法來了,時間大大節省。
public class PrimeNumbers {
public static void main(String[] args) {
final int max = 100;
int count = 0;
boolean flag = true;
for (int i = 2; i <= max; i++) {
for (int j = 2; j <= Math.sqrt(i); j++) {
if (i % j == 0) {
flag = false;
break;
}
flag = true;
}
if (flag) {
count++;
}
}
System.out.println("質數數是:" + count);
}
}
還有更好的算法嗎?思考ing···