原始錯誤程式碼
int main(){
int n;
Cout<<"input number"<>n; // 錯誤:Cout 大寫、<> 方向反、缺分號
For (int i=2;i<=sqrt(n);i++) { // For 大寫
if((n%i)==0) break;
else cout<<n<<"bushi sushu"<<endl; // 邏輯錯:每次循環都輸出
}
Rerurn 0; // 拼寫錯
}
修正版 (標準 C++)
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cout << "input number: ";
if (!(cin >> n)) return 1; // 輸入驗證
if (n < 2) { cout << n << " 不是質數\n"; return 0; }
bool isPrime = true;
for (int i = 2; i * i <= n; ++i) { // i*i 避免 sqrt 浮點誤差
if (n % i == 0) {
isPrime = false;
break;
}
}
cout << n << (isPrime ? " 是質數" : " 不是質數") << endl;
return 0;
}
關鍵修正點
| 錯誤 | 修正 |
Cout | cout (小寫) |
<>n | >> n (輸入流運算子) |
For | for (小寫) |
| 邏輯:else 輸出 | 用旗標 isPrime 循環後統一輸出 |
Rerurn | return |
sqrt(n) 每次計算 | i * i <= n 整數運算更快 |
進階優化:試除法優化
if (n % 2 == 0) return n == 2;
for (int i = 3; i * i <= n; i += 2) // 只檢查奇數
if (n % i == 0) return false;
編譯執行
g++ prime.cpp -o prime
./prime