当前位置: 首页 > news >正文

密码学算法 - 连分数算法

当你在计算某个数的近似值时🔍,或者在求解某个方程的根时🧮,连分数算法 就像一把神奇的放大镜🔎,能帮你逐步逼近那个隐藏在数字背后的真相。

欢迎来到《密码学核心算法实战》的连分数专题!这里没有纸上谈兵的理论空谈(真的不画大饼😉),只有一把把能直接撬动数据安全的精密齿轮⚙️。

连分数算法的操作 🌟

这个算法可以直接将一个有理数或者无理数直接表示成一个连分数形式,当然因为这个算法的原理十分简单,所以就不单独拿出来讲了,直接进入正题!🤗

输入:一个实数x xx
i = 0 i = 0i=0x 0 = x x_0 = xx0=x

  1. a i a_iaix i x_ixi的整数部分
  2. b i = x i − a i b_i = x_i - a_ibi=xiai,如果b i = 0 b_i = 0bi=0,则算法结束
  3. 如果b i ≠ 0 b_i \neq 0bi=0,则令x i + 1 = 1 b i x_{i+1} = \frac{1}{b_i}xi+1=bi1i = i + 1 i = i + 1i=i+1,回到步骤 1

输出:连分数的部分商a 0 , a 1 , a 2 , … a_0, a_1, a_2, \ldotsa0,a1,a2,,即x = [ a 0 , a 1 , a 2 , … ] x = [a_0, a_1, a_2, \ldots]x=[a0,a1,a2,]

反过来,x = [ a 0 , a 1 , a 2 , … ] x = [a_0, a_1, a_2, \ldots]x=[a0,a1,a2,]也可以通过递推关系来计算出x xx的近似值。

x n = [ a 0 , a 1 , … , a n ] x_n = [a_0, a_1, \ldots, a_n]xn=[a0,a1,,an],则有递推关系:

p n = a n p n − 1 + p n − 2 q n = a n q n − 1 + q n − 2 \begin{align*} p_n &= a_n p_{n-1} + p_{n-2} \\ q_n &= a_n q_{n-1} + q_{n-2} \end{align*}pnqn=anpn1+pn2=anqn1+qn2

其中p n p_npnq n q_nqn分别是x n x_nxn的分子和分母。
最终,x n = p n q n x_n = \frac{p_n}{q_n}xn=qnpn就是x xx的一个近似值。

连分数算法的实现 😎

下面是一个 Python 实现的连分数算法:

defcontinued_fraction(x,max_iterations=100):a=[]for_inrange(max_iterations):ai=int(x)a.append(ai)x-=aiifx==0:breakx=1/xreturnadefcontinued_fraction_convergents(coeffs):""" 用递推公式计算连分数 [a0,a1,...an] 的所有渐进分数 参数: coeffs: 连分数部分商列表 [a0,a1,a2,...] 返回: list: 每个元素是 (n, p_n, q_n, x_n),包含每一步的递推结果 """ifnotcoeffs:raiseValueError("连分数系数列表不能为空!")p_prev_prev=0# p_{-2}p_prev=1# p_{-1}q_prev_prev=1# q_{-2}q_prev=0# q_{-1}convergents=[]# 存储每一步的渐进分数forn,a_ninenumerate(coeffs):# 递推计算 p_n 和 q_np_n=a_n*p_prev+p_prev_prev q_n=a_n*q_prev+q_prev_prev# 计算当前渐进分数 x_n = p_n/q_nx_n=p_n/q_n# 保存结果(n从0开始)convergents.append((n,p_n,q_n,x_n))# 更新前两项,为下一次递推做准备p_prev_prev,p_prev=p_prev,p_n q_prev_prev,q_prev=q_prev,q_nreturnconvergents

SageMath 偷懒 🤓👆

有同学说:“博主,博主,你的算法确实很厉害,但是还是太吃操作了,有没有更加简单无脑的用法?”👻
有的,兄弟有的,这样的算法在 SageMath 中早就已经被封装好了🤫,我们直接调用就行了:

fromsage.allimportcontinued_fraction# 这个 continued_fraction 函数既可以计算连分数的部分商,也可以计算连分数的渐进分数,具体用法如下:# 计算连分数部分商coeffs=continued_fraction(x)# 计算连分数的渐进分数convergents=continued_fraction(coeffs)

怎么样,是不是非常简单?🤣👉🤡

我的个人blog:Alice and Bobの神秘小屋

http://www.cnnetsun.cn/news/1392531.html

相关文章:

  • Ostrakon-VL-8B实操手册:自定义ShopBench子集评估模型在本地门店数据表现
  • OpenClaw日志分析:Qwen3-32B实时监控系统日志并发送告警
  • 告别云端上传:用FilePizza实现浏览器直连的P2P文件传输
  • 告别ChatGPT!Qwen3-4B暗黑WebUI体验:免费高智商AI写作助手
  • 2026年AI提示词(Prompt)终极指南:国内聚合站实战技巧
  • HAR实战指南:从Kinetics-400数据集获取到视频帧预处理全流程解析
  • ESP32嵌入式固件骨架:基于tcMenu的工程级基础库
  • 【独家首发】MCP 2.0安全架构设计图完整标注版(含17个攻击面标记+9个CWE编号映射):从威胁建模到自动化检测脚本一键生成
  • Java+ElasticSearch+Pytorch实战:手把手教你搭建一个简易版Google以图搜图系统
  • OpenClaw跨平台控制:GLM-4.7-Flash同步管理多台设备任务
  • 电脑控制手机!免安装! 上班族狂喜!手机投屏软件推荐
  • Dev-C++怀旧与启示:从轻量IDE看Phi-3-vision模型轻量化部署趋势
  • 硬件工程师成长路径:从电路直觉到系统思维
  • Lingbot-Depth-Pretrain-ViTL-14数据库联动实战:深度数据存储与MySQL管理
  • RVC常见问题解决:训练失败、效果不佳怎么办?排查指南来了
  • 银河麒麟系统下Miniconda安装避坑指南:解决Permission denied错误
  • TreeATE vs 传统测试工具:开源自动化测试平台在工业物联网中的优势解析
  • Axure RP 中文语言包部署指南:提升原型设计效率的本地化解决方案
  • C盘空间可视化工具哪个好?实测这款免费神器,一键清理30GB垃圾
  • NCP5623 RGB LED驱动库深度解析与低功耗实践
  • Qwen3-0.6B-FP8效果展示:FP8下长文档摘要保持关键事实与逻辑完整性
  • 保姆级教程:基于Gradio快速搭建Qwen3-ASR-0.6B语音识别Web应用
  • Neeshck-Z-lmage_LYX_v2入门必看:LoRA权重文件命名规范与目录结构建议
  • # 发散创新:基于WebRTC的实时音视频通信在前端应用中的深度实践在
  • Qwen3.5-9B智能体任务演示:自动订机票+查天气+生成行程表全流程视频
  • 1.两数之和-day1
  • Phi-3-vision-128k-instruct赋能运维:自动化分析服务器监控图表与日志截图
  • EffctiveC++_02第二章
  • 番茄小说下载器:Rust重写的高性能离线阅读解决方案
  • Windows Cleaner系统清理工具全攻略:让C盘重获新生的实用指南