for (int a = 101; a < 200; a += 2) {
for (int b = 2; b < a; b++) {
if (a % b != 0) { // 錯誤:只要一次不可整除就打印
System.out.println(a);
i++;
} else {
break;
}
}
}
邏輯缺陷:a=105時,b=2不可整除 → 打印105、計數+1;b=3可整除 → break。導致非素數被多次打印、計數錯亂。
int count = 0;
for (int a = 101; a <= 200; a++) { // 含200
boolean isPrime = true; // 假設為真
for (int b = 2; b * b <= a; b++) { // 只需驗證到√a
if (a % b == 0) { // 找到因子 → 證偽
isPrime = false;
break;
}
}
if (isPrime) {
System.out.println(a);
count++;
}
}
System.out.println("素數個數: " + count);
a重新假設isPrime=true。if (a % b == 0)表示不是素數,設置標誌false並break。isPrime仍為true才是素數。b * b <= a等價b <= Math.sqrt(a),避免浮點運算。boolean isPrime(int n) {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 == 0 || n % 3 == 0) return false;
for (int i = 5; i * i <= n; i += 6)
if (n % i == 0 || n % (i + 2) == 0) return false;
return true;
}
101-200間素數共21個:101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199。