错误1:判断终止条件要用<=
根据质数的定义,使用循环除法,判断从[2, n/i]
中的数能否被整除,需要包含n/i
,例如4、9等非质数。
#include <iostream>
using namespace std;
bool is_prime(int a) {
if (a < 2) return false;
for (int i = 2; i < a / i; i++) // <--mistake
if (a % i == 0) return false;
return true;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int q;
cin >> q;
if (is_prime(q)) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}
正确1:
#include <iostream>
using namespace std;
bool is_prime(int a) {
if (a < 2) return false;
for (int i = 2; i <= a / i; i++) // <--mistake
if (a % i == 0) return false;
return true;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
int q;
cin >> q;
if (is_prime(q)) cout << "Yes" << endl;
else cout << "No" << endl;
}
return 0;
}