前言
最近在学rsa,补一下连分数
定义
形如 
      
       
        
         
         
           a 
          
         
           0 
          
         
        
          + 
         
         
         
           1 
          
          
           
           
             a 
            
           
             1 
            
           
          
            + 
           
           
           
             1 
            
            
             
             
               a 
              
             
               2 
              
             
            
              + 
             
             
             
               1 
              
              
               
               
                 a 
                
               
                 3 
                
               
              
                + 
               
               
               
                 1 
                
               
                 … 
                
               
              
             
            
           
          
         
        
       
         a_{0}+\frac{1}{a_{1}+\frac{1}{a_{2}+\frac{1}{a_{3}+\frac{1}{\ldots}}}} 
        
       
     a0+a1+a2+a3+…1111
 的分数
连分数分为有限连分数无限连分数
 如上是一个无限连分数
任何一个有理数都可以表示为有限连分数
 任何一个无理数都可以表示为无限连分数
简洁表达
  
      
       
        
        
          [ 
         
         
         
           a 
          
         
           0 
          
         
        
          , 
         
         
         
           a 
          
         
           1 
          
         
        
          , 
         
         
         
           a 
          
         
           2 
          
         
        
          , 
         
         
         
           a 
          
         
           3 
          
         
        
          , 
         
         
         
           a 
          
         
           4 
          
         
        
          ⋯ 
          
        
          ] 
         
        
       
         \left[\mathrm{a}_{0}, \mathrm{a}_{1}, \mathrm{a}_{2}, \mathrm{a}_{3}, \mathrm{a}_{4} \cdots\right] 
        
       
     [a0,a1,a2,a3,a4⋯]
python实现
以下脚本来自NSSCTF平台的Xenny师傅
分数转连分数
def continuedFra(x, y):
    cF = []
    while y:
        cF += [x // y]
        x, y = y, x % y
    return cF

 连分数转分数
def Simplify(ctnf):
    numerator = 0
    denominator = 1
    for x in ctnf[::-1]:
        numerator, denominator = denominator, x * denominator + numerator
    return (numerator, denominator)

 我感觉这里的numerator和denominator变量声明反了(只是命名问题)
以下是Lazzaro师傅的脚本
def continued_fraction(sub_res):
	numerator,denominator=1,0
	for i in sub_res[::-1]:	  #从sublist的后面往前循环
		denominator,numerator=numerator,i*numerator+denominator
	return denominator,numerator   #得到渐进分数的分母和分子,并返回
求渐进分数
这是Lazzaro师傅的
def sub_fraction(x,y):
	res=continuedFra(x,y)
	res=list(map(Simplify,(res[0:i] for i in range(1,len(res)))))  #将连分数的结果逐一截取以求渐进分数
	return res
这是Xenny师傅的
def getit(c):
    cf = []
    for i in range(1, len(c)):
        cf.append(Simplify(c[:i]))
    return cf



![联合阿里在职测开工程师耗时一个星期写的 【接口测试+自动化接口接口测试详解]](https://img-blog.csdnimg.cn/img_convert/7b5ad4070f2bacc76b96fb75ea3f59e9.png)















