SorryToPerson logo
返回
算法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