当前位置: 首页 > 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.jsqmd.com/news/509312/

相关文章:

  • Windows任务栏美化:TranslucentTB打造个性化视觉体验
  • 差速器壳CAD图纸
  • OpenClaw技能市场探秘:GLM-4.7-Flash支持的10个实用自动化模块
  • 混合域注意力机制在图像分割中的动态特征增强实践
  • 文档获取新方案:百度文库内容优化与保存工具
  • 论文AI率突然从20%涨到50%怎么办?紧急处理攻略
  • 2026年杭州美的中央空调方案设计指南:五家核心服务商与行业趋势深度解读 - 2026年企业推荐榜
  • 2026年大模型微调必看:超全框架平台指南,助你打造AI神助手!
  • SmolVLA参数详解:256×256输入分辨率对边缘计算设备的友好性分析
  • 突破3大技术瓶颈:Argos Translate如何重新定义离线翻译领域
  • 告别御剑和Dirsearch!用Python3写的dirmap,我这样配置让它效率翻倍
  • 2026郑州财税服务商深度测评:中小企业如何选择靠谱伙伴? - 2026年企业推荐榜
  • 避免重装Python的坑:Miniconda-Python3.8镜像创建独立环境实战
  • 2026光栅印刷服务优质供应商推荐指南 - 优质品牌商家
  • 深度解析Snipe-IT:开源IT资产管理系统如何实现企业级自动化管理
  • Alpamayo-R1-10B开源模型价值:降低L4研发门槛,让算法团队专注因果逻辑而非工程胶水
  • 从Word2Vec到Transformer:图解NLP模型进化史(附吴恩达课程重点)
  • YOLO12在安防监控中的应用:实时检测人车物,效果实测
  • 从“安全龙虾”风暴看企业架构演进:如何用 AI Agent 优雅终结“系统烟囱”与集成噩梦?
  • Ostrakon-VL-8B实操手册:自定义ShopBench子集评估模型在本地门店数据表现
  • IntelliJ IDEA 2023.2性能分析神器:编辑器内性能提示实战指南(含单测与服务场景)
  • 矿物成分数据智能分类实战(三):以平均值填充数据集的pytorch框架和MLP算法实现与性能分析
  • ArduinoJson-esphomelib:ESPHome专用嵌入式JSON解析库
  • 突破单平台限制:obs-multi-rtmp如何实现高效的多路直播分发
  • 5步掌握QQ空间历史数据备份:Python爬虫实战指南
  • Realistic Vision V5.1效果实测:毛衣丝绸牛仔布,各种材质渲染太逼真
  • 软件测试方法论在ccmusic-database项目中的应用
  • Petduino:面向教育的Arduino兼容嵌入式宠物平台
  • GLM-4.7-Flash新手入门:手把手教你搭建本地AI助手
  • ESP32嵌入式固件骨架:基于tcMenu的工程级基础库