Reciprocal cycles

本文探讨了单位分数中循环小数长度的问题,并提供了一个算法来找出小于1000的分母中拥有最长循环周期的分数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://projecteuler.net/problem=26

Reciprocal cycles

Problem 26

A unit fraction contains 1 in the numerator. The decimal representation of the unit fractions with denominators 2 to 10 are given:

1/20.5
1/30.(3)
1/40.25
1/50.2
1/60.1(6)
1/70.(142857)
1/80.125
1/90.(1)
1/100.1

Where 0.1(6) means 0.166666..., and has a 1-digit recurring cycle. It can be seen that 1/7 has a 6-digit recurring cycle.

Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.

因为分母部分保持不变,所以只要分子部分一旦重复出现,循环小数的数量就确定下来了。而分子部分其实就是对分母取余剩下的那部分。 可以测试一下1/7即可。

因为取余的值不会大于分母,所以计算量也不会大于分母。

当然,有一个公式可以算出素数的循环小数的位数,用起来更简单一点,不过1000个也就没有必要了。

当然除了像下面这样蛮算,还可以将数拆分下来,求所有的因子,如:1/21 = 1/3  * 1/ 7他的循环小数位数 就是 1 * 6.依次类推,也挺简单的。

def ReciprocalCycles():
    #循环小数数量集合
    result = 0
    maxNum = 0
    for i in range(1,1000):
        #找到每一个值的循环小数数量
        tmp = CountCycle(i)
        if maxNum < tmp:
            maxNum = tmp
            result = i
    return result

def CountCycle(num):
    #余数的字典,记录每一个余数所在的位置
    ModDict={}
    #把1初始化进去
    ModDict[1]=0
    #记录下一个余数所在位置
    index=1
    #下一个除数是1 * 10
    Numerator = 10
    #求取第一个真正的余数
    modNum = Numerator % num
    #如果余数为零,或者余数之前出现过,则退出,否则一直进行
    while modNum != 0 and modNum not in ModDict:
        #将余数和其位置放到字典里面
        ModDict[modNum] = index
        #除数初始化
        Numerator = modNum * 10
        #求余数
        modNum = Numerator % num
        #更新余数的下一个位置
        index += 1
    #如果能除尽,则不是循环小数
    if modNum == 0:
        return 0
    #返回两个相同余数的位置差,就是循环小数的数量
    return index - ModDict[modNum]

print(ReciprocalCycles())
    


### Reciprocal Rules 的概念 在数学和计算机科学领域,Reciprocal Rule 主要用于微积分中的导数计算。它描述了一个函数倒数的导数如何通过原函数及其导数来表示。具体来说,如果 \( f(x) \neq 0 \),那么其倒数 \( g(x) = \frac{1}{f(x)} \) 的导数可以写成: \[ g'(x) = -\frac{f'(x)}{(f(x))^2} \] 这一规则通常被用来简化涉及分数形式表达式的求导过程[^1]。 ```python def reciprocal_derivative(f, df_dx, x): """ 计算给定函数 f 和它的导数 df/dx 在某一点 x 处, 对应于该函数倒数的导数值。 参数: f (function): 原始函数 f(x) df_dx (function): 函数 f(x) 的导数 x (float): 自变量值 返回: float: 导数值 """ return -(df_dx(x)) / (f(x)**2) # 示例定义 import math # 定义原始函数及其导数 def func_f(x): return math.sin(x) def deriv_f(x): return math.cos(x) # 测试点 test_x = math.pi / 4 result = reciprocal_derivative(func_f, deriv_f, test_x) print(result) ``` 上述代码展示了如何基于 Reciprocal Rule 实现一个简单的 Python 函数,用于计算任意可微分函数倒数的导数。 ### 应用场景 Reciprocal Rule 不仅限于理论推导,在实际工程中有广泛的应用。例如,在信号处理中,当分析滤波器传递函数时,可能需要对某些频率响应取倒数并进一步研究其变化率;又或者是在优化算法设计过程中遇到复杂的复合目标函数时,利用此法则能够有效减少不必要的复杂运算步骤[^3]。 此外,在机器学习框架下构建自定义层或损失函数时也可能需要用到类似的技巧——即通过对激活项或其他组件施加变换后再反向传播梯度信息完成参数调整操作[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值