算法2026-04-17·7 分钟
算法知识库:数学算法实现
JavaScript/TypeScript 实现数学相关算法,如素数检测、最大公约数、快速幂等。
数学算法实现
1. 素数检测
ts
function isPrime(n: number): boolean {
if (n <= 1) return false;
if (n <= 3) return true;
if (n % 2 === 0 || n % 3 === 0) return false;
for (let i = 5; i * i <= n; i += 6) {
if (n % i === 0 || n % (i + 2) === 0) return false;
}
return true;
}2. 埃拉托斯特尼筛法
ts
function sieveOfEratosthenes(n: number): number[] {
const isPrime = new Array(n + 1).fill(true);
isPrime[0] = isPrime[1] = false;
for (let i = 2; i * i <= n; i += 1) {
if (isPrime[i]) {
for (let j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
const primes: number[] = [];
for (let i = 2; i <= n; i += 1) {
if (isPrime[i]) primes.push(i);
}
return primes;
}3. 最大公约数
ts
function gcd(a: number, b: number): number {
while (b !== 0) {
const temp = b;
b = a % b;
a = temp;
}
return a;
}4. 最小公倍数
ts
function lcm(a: number, b: number): number {
return (a * b) / gcd(a, b);
}5. 快速幂
ts
function pow(x: number, n: number): number {
if (n === 0) return 1;
if (n < 0) return 1 / pow(x, -n);
let result = 1;
let base = x;
while (n > 0) {
if (n % 2 === 1) {
result *= base;
}
base *= base;
n = Math.floor(n / 2);
}
return result;
}6. 阶乘
ts
function factorial(n: number): number {
if (n === 0 || n === 1) return 1;
return n * factorial(n - 1);
}
function factorialIterative(n: number): number {
let result = 1;
for (let i = 2; i <= n; i += 1) {
result *= i;
}
return result;
}7. 斐波那契数列
ts
function fibonacci(n: number): number {
if (n <= 1) return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
function fibonacciIterative(n: number): number {
if (n <= 1) return n;
let a = 0;
let b = 1;
for (let i = 2; i <= n; i += 1) {
const temp = a + b;
a = b;
b = temp;
}
return b;
}8. 实现要点
- 素数检测使用 6k±1 优化。
- 欧几里得算法计算 GCD。
- 快速幂使用二进制分解。
- 递归实现简洁但可能栈溢出。
算法数学JavaScript