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

总结

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

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

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

相关推荐
钢门狂鸭1 小时前
关于rust的crates.io
开发语言·后端·rust
Lionel_SSL2 小时前
《深入理解Java虚拟机》第三章读书笔记:垃圾回收机制与内存管理
java·开发语言·jvm
Greedy Alg2 小时前
LeetCode 142. 环形链表 II
算法
睡不醒的kun2 小时前
leetcode算法刷题的第三十二天
数据结构·c++·算法·leetcode·职场和发展·贪心算法·动态规划
技术猿188702783512 小时前
PHP 与 WebAssembly 的 “天然隔阂”
开发语言·php·wasm
薄荷撞~可乐2 小时前
C#Task(Api)应用
开发语言·c#
独行soc2 小时前
2025年渗透测试面试题总结-66(题目+回答)
java·网络·python·安全·web安全·adb·渗透测试
先做个垃圾出来………3 小时前
残差连接的概念与作用
人工智能·算法·机器学习·语言模型·自然语言处理
SuperCandyXu4 小时前
P3205 [HNOI2010] 合唱队-普及+/提高
c++·算法·洛谷
another heaven4 小时前
【Qt VS2022调试时无法查看QString等Qt变量信息】解决方法
开发语言·qt