质数生成器
给定正整数 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
}