当前位置:   article > 正文

python再计算无限循环小数的循环节_py 循环节长度

py 循环节长度

循环节:
如果无限小数的小数点后,从某一位起向右进行到某一位止的一节数字循环出现,首尾衔接,称这种小数为循环小数,这一节数字称为循环节。
#寻找1000以内的n,使得1/n的循环小数节长度最长

#问题化简,首先不是素数的数的循环节长度必定可以由其他数组成比如14可以由2*7组成,
#那么1/14与1/7有相同的循环节长度,所以只需找出所有的素数不(包括2与5),求的他们的循环节长度。
#判断一个1/n是否为循环小数。
def zhi(n):
    if n==2 or n==5:
        return True
    if n%2==0:
        return zhi(n//2)
    if n%5==0:
        return zhi(n//5)
    return False
   #判断一个数n是否为素数
def is_prime(n):
    if n == 1:
        return False
    for i in range(2, int(sqrt(n))+1):
        if n % i == 0:
            return 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

前提是所有的数必须是质数(即素数)循环节的长度是使分母P整除10^k-1的最小k值。例如:9可以整除10^1-1,所以当分母为9时,循环节是1位。7可以整除10^6-1=999999,所以当分母为7时,循环节是6位。

#判断1/n的小数循环节点长度
 Length(n):
    L=1
    while(True):
        if (10**L-1)%n==0:
            break
        L+=1
    return L
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
a=[]
for i in range(2,101):
    if is_prime(i) and i!=2 and i!=5:#素数包括25
        a.append([Length(i),i])
print(a)
##[[1, 3], [6, 7], [2, 11], [6, 13], [16, 17], [18, 19], [22, 23], [28, 29], [15, 31], [3, 37], [5, 41], [21, 43], [46, 47], [13, 53], [58, 59], [60, 61], [33, 67], [35, 71], [8, 73], [13, 79], [41, 83], [44, 89], [96, 97]]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

第一次知道利用上面的算法来求循环节,真是长见识了。继续努力。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/195062
推荐阅读
相关标签
  

闽ICP备14008679号