📅  最后修改于: 2023-12-03 15:18:04.890000             🧑  作者: Mango
给定正整数N和K,求满足N除以K的幂的商的总和不超过N的所有正整数序列。
例如,当N=10,K=3时,符合条件的序列为{1, 2, 3, 4, 6, 8, 9},这些数分别是3^0, 3^02^1, 3^1, 3^02^2, 3^12^1, 3^2, 3^02^3。
设f(i)为N除以K的幂的商的总和不超过i的最大值,那么我们可以得到一个递推式:
f(i) = f(i-1) + i/K^(j),其中K^j为小于等于i的最大幂次。
与下一个f(i+1)的关系是:
f(i+1) = f(i) + (i+1)/K^(j+1)
所以可以使用动态规划来解决问题。
def sum_div_by_k_power(n: int, k: int) -> List[int]:
res = [] # 符合条件的结果序列
f = [0] * (n + 1) # 动态规划数组
for i in range(1, n+1):
# 求K的幂次
j = 0
while k ** (j+1) <= i:
j += 1
# 计算f(i)
f[i] = f[i-1] + i // k ** j
# 判断是否符合条件
if f[i] <= n:
res.append(i)
return res
输入:n=10,k=3
输出:[1, 2, 3, 4, 6, 8, 9]