我们可以使用'线性筛法”来查找素数,它不需要使用模运算。
线性筛法的基本思路是:在遍历自然数时,用一个数组记录每个数是否是素数。若当前数是素数,则将该数的倍数标记为'合数”,直到遍历完所有自然数。
代码示例:
int prime[N]; // 用于记录每个数是否是素数
vector
上述代码用一个数组 prime[N] 记录每个数是否是素数,初始值都为 0 表示都是素数。然后遍历自然数 i,如果 i 是素数,则将它加入素数序列 primes 中;接着遍历 primes,将 i 的倍数标记为'合数”,并在可能的情况下退出循环。最终,primes 中存储的就是所有素数。
时间复杂度为 O(n),空间复杂度也为 O(n)。