求每次递增(c)%的(a)美元可计入(b)美元的次数计算公式
求解递增计入次数的公式推导
嘿,咱们一步步拆解这个问题,把公式推导明白!先明确问题里的核心变量,方便后续梳理:
- 初始计入金额:
a美元(比如你例子里的1美元) - 总可用金额:
b美元(例子里的100美元) - 每次计入金额的递增比例:
c%,咱们把它转化为增长率r = 1 + c/100(比如1%的话,r = 1.01) - 目标:找到最大的整数
n,使得前n次计入的总金额不超过b
核心思路:等比数列求和
每次计入的金额是一个等比数列:第一次是a,第二次是a*r,第三次是a*r²,……,第n次是a*rⁿ⁻¹。我们需要保证前n项的和 ≤ b。
等比数列前n项和的标准公式是:
Sₙ = a * (rⁿ - 1) / (r - 1)
推导求解n的公式
我们需要解不等式 Sₙ ≤ b,代入求和公式后一步步整理:
- 代入公式得到基础不等式:
a * (rⁿ - 1) / (r - 1) ≤ b - 两边乘以
(r-1)(因为r>1,r-1是正数,不等号方向不变):a*(rⁿ - 1) ≤ b*(r - 1) - 两边除以
a,再移项整理:rⁿ ≤ [b*(r - 1)/a] + 1 - 对两边取自然对数(用常用对数也可以,只要统一就行):
n * ln(r) ≤ ln( [b*(r - 1)/a] + 1 ) - 因为
r>1,ln(r)是正数,两边除以它不等号方向不变:n ≤ ln( [b*(r - 1)/a] + 1 ) / ln(r)
最后,n就是这个计算结果的向下取整(取不超过该值的最大整数)——毕竟次数必须是整数,还得保证总计入金额不超过b。
验证例子
用你给的测试场景验证:a=1,b=100,c=1%(即r=1.01)
- 计算
[b*(r-1)/a] +1 = [100*0.01/1]+1 = 2 - 计算
ln(2)/ln(1.01) ≈ 0.6931 / 0.00995 ≈ 69.67 - 向下取整得到
n=69
实际验证:前69次的总金额是1*(1.01^69 -1)/0.01 ≈ 99.98美元,刚好不超过100;如果取70次,总金额约为101.97美元,超过了上限,完全符合预期。
特殊情况处理
- 如果
a > b:那一次都无法计入,直接得n=0 - 如果
c=0(即每次计入金额不变):此时r=1,等比数列求和公式退化为Sₙ = n*a,解n*a ≤b得n = floor(b/a),用上面的对数公式也能得到一致结果(当r→1时,ln(r)≈r-1,ln(1 + b*(r-1)/a)≈b*(r-1)/a,两者相除就是b/a,向下取整后完全匹配)
内容的提问来源于stack exchange,提问作者MitchellNZ




