python 经典数学算法

以下是使用Python实现几个经典数学算法的示例:


1. 欧几里得算法(最大公约数)

欧几里得算法用于计算两个数的最大公约数(GCD)。

python 复制代码
def gcd(a, b):
    while b:
        a, b = b, a % b
    return a

# 示例
a = 56
b = 98
print(gcd(a, b))  # 输出: 14

2. 素数检测(Sieve of Eratosthenes)

埃拉托斯特尼筛法用于高效地生成一定范围内的所有素数。

python 复制代码
def sieve_of_eratosthenes(n):
    is_prime = [True] * (n + 1)
    is_prime[0] = is_prime[1] = False  # 0 和 1 不是素数

    for p in range(2, int(n**0.5) + 1):
        if is_prime[p]:
            for multiple in range(p * p, n + 1, p):
                is_prime[multiple] = False

    primes = [p for p in range(n + 1) if is_prime[p]]
    return primes

# 示例
n = 50
print(sieve_of_eratosthenes(n))
# 输出: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

3. 快速幂算法(Exponentiation by Squaring)

快速幂算法用于高效地计算大指数的幂运算。

python 复制代码
def fast_pow(base, exponent):
    result = 1
    while exponent > 0:
        if exponent % 2 == 1:
            result *= base
        base *= base
        exponent //= 2
    return result

# 示例
base = 2
exponent = 10
print(fast_pow(base, exponent))  # 输出: 1024

4. 斐波那契数列(Fibonacci Sequence)

斐波那契数列可以通过递归、动态规划或矩阵快速幂实现。以下是动态规划的实现。

python 复制代码
def fibonacci(n):
    if n <= 1:
        return n
    dp = [0] * (n + 1)
    dp[1] = 1
    for i in range(2, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    return dp[n]

# 示例
n = 10
print(fibonacci(n))  # 输出: 55

5. 牛顿迭代法(求平方根)

牛顿迭代法用于高效地计算一个数的平方根。

python 复制代码
def sqrt_newton(n, tolerance=1e-10):
    x = n
    while True:
        root = 0.5 * (x + n / x)
        if abs(root - x) < tolerance:
            return root
        x = root

# 示例
n = 25
print(sqrt_newton(n))  # 输出: 5.0

总结

这些数学算法是解决许多经典数学问题的基础工具:

  • 欧几里得算法:用于计算最大公约数。
  • 埃拉托斯特尼筛法:用于生成素数。
  • 快速幂算法:用于高效计算大指数幂。
  • 斐波那契数列:通过动态规划避免重复计算。
  • 牛顿迭代法:用于高效求解平方根。

通过掌握这些算法,可以解决许多数学和编程问题。

相关推荐
东莞市云毅网络有限公司2 小时前
AI 引用句逐条回指原文:让回答可回溯的校验实现
python·数据清洗·rag·企业知识库·文档解析
Sarvartha3 小时前
final 关键字
java·开发语言
数字融合4 小时前
透明化视频三维矿山井下照明重建技术
人工智能·python·数码相机
yi0114 小时前
LeetCode 219:存在重复元素 II——哈希表记录“最近一次出现的位置”
数据结构·人工智能·笔记·python·算法·leetcode·哈希表
程序员Sunday4 小时前
JavaScript 事件循环面试题,宏任务与微任务怎么执行|Sunday面试指南
开发语言·javascript·面试·校招·事件循环·程序员sunday
zhangzeyuaaa5 小时前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
Marst Code5 小时前
上位机开发日记 · 第 2 篇 · 架构先行:六层分层与边界
python
李日华大战鸡红6 小时前
FOC状态空间方程模型推导(学习记录)
python·学习·线性代数
谢亮_vipxieliang6 小时前
用 PHP 构建轻量级 REST API:从路由到鉴权的完整实践
开发语言·后端·php
思无邪666 小时前
用 AI 做 JS 逆向:从抓包到复现的完整方法论
开发语言·javascript·人工智能