质数生成器

给定正整数 n,返回小于等于 n 的所有质数

TypeScript
export function primesIn(n: number): number[] {
    const vis: boolean[] = new Array(n + 1).fill(false)
    const primes: number[] = []
    for (let i = 2; i <= n; i++) {
        if (vis[i]) continue
        primes.push(i)
        for (let j = i * i; j <= n; j += i) vis[j] = true
    }
    return primes
}
JavaScript
export function primesIn(n) {
    const vis = new Array(n + 1).fill(false)
    const primes = []
    for (let i = 2; i <= n; i++) {
        if (vis[i]) continue
        primes.push(i)
        for (let j = i * i; j <= n; j += i) vis[j] = true
    }
    return primes
}
Rust
pub fn primes_in(n: usize) -> Vec<i32> {
    let mut primes = vec![];
    let mut vis = vec![false; n + 1];
    for i in 2..=n {
        if vis[i] {
            continue;
        }
        primes.push(i as i32);
        for j in (i * i..=n).step_by(i) {
            vis[j] = true;
        }
    }
    primes
}
Java

import java.util.ArrayList;

class PrimeGenerator {

    public static int[] primeIn(int n) {
        boolean[] vis = new boolean[n + 1];
        ArrayList<Integer> primes = new ArrayList();
        for (int i = 2; i <= n; i++) {
            if (vis[i]) {
                continue;
            }
            primes.add(i);
            for (int j = i * i; j <= n; j += i) {
                vis[j] = true;
            }
        }
        return primes.stream().mapToInt(Integer::intValue).toArray();
    }
}
Python
def primes_in(n: int) -> list[int]:
    primes = []
    vis = [False] * (n + 1)
    for i in range(2, n + 1):
        if vis[i]:
            continue
        primes.append(i)
        for j in range(i * i, n + 1, i):
            vis[j] = True
    return primes
Go
package algo

func PrimesIn(n int) []int {
    primes := []int{}
    vis := make([]bool, n+1)
    for i := 2; i < n; i++ {
        if vis[i] {
            continue
        }
        primes = append(primes, i)
        for j := i * i; j <= n; j += i {
            vis[j] = true
        }
    }
    return primes
}