第20733题
关于判断正整数是否为质数的C++代码的说法,下列正确的是?
bool is_prime(int n) {
    if (n <= 1)
        return false;
    if (n == 2 || n == 3 || n == 5)
        return true;
    if (n % 2 == 0 || n % 3 == 0 || n % 5 == 0)
        return false;
    int i = 7;
    int step = 4;
    int finish_number = sqrt(n) + 1;
    while (i <= finish_number) {
        if (n % i == 0)
            return false;
        i += step;
        step = 6 - step;
    }
    return true;
}
A

代码存在错误,比如5是质数,但因为5%5余数是0返回了false

B

finish_number的值应该是n/2,当前写法将导致错误

C

当前while循环正确的前提是:所有大于3的质数都符合6k±1形式

D

while循环修改如下,其执行效果和执行时间相同。

for (int i = 2; i < finish_number; i++) {
    if (n % i == 0)
        return false;
}
return true;