下面代码实现线性筛(欧拉筛),以筛选出 n 以内的所有素数。横线处的代码应为( )。 def sieve(n): is_prime = [True] * (n + 1) primes = [] if n >= 0: is_prime[0] = False if n >= 1: is_prime[1] = False for i in range(2, n + 1): if is_prime[i]: primes.append(i) j = 0 while j < len(primes) and i * primes[j] <= n: is_prime[i * primes[j]] = False if ____________________: # 在此处填入代码 break j += 1 return primes
A:i % primes[j] == 0
B:primes[j] % i == 0
C:i % primes[j] != 0
D:i == primes[j]
正确答案:A
答案解析
遍历2到n的每个数i,若i未被标记为合数,则加入素数列表。对于每个已知素数primes[j],计算i与primes[j]的乘积作为合数并标记。当i能被primes[j]整除时,停止对后续素数的处理,确保每个合数仅被其最小质因数筛去。循环条件需判断当前素数是否整除i,以控制筛法的终止时机。
试卷来源:202606 CCF-GESP编程能力等级认证Python五级真题