R语言实现:给定正整数S查找最接近的五边形数pₙ
解题思路
五边形数的计算公式为 $p_n = \frac{3n^2 -n}{2}$,我们可以通过反解一元二次方程得到理论上使 $p_n=S$ 的正整数n的近似值:
$3n^2 -n - 2S = 0$
取正根可得 $n = \frac{1 + \sqrt{1 + 24S}}{6}$
由于n必须是正整数,我们只需要对比该近似值向下取整floor(n)和向上取整ceiling(n)对应的两个五边形数,返回距离S更近的即可,若两者距离相等任选其一返回。
实现代码
# 计算第n个五边形数 P_n <- function(n) { if (n == 0) { return(0) } return((3 * n^2 - n) / 2) } # 输入S为≥1的整数,输出最接近S的五边形数 nearest_pentagonal <- function(S) { # 输入合法性校验 if (S < 1 || S != as.integer(S)) { stop("输入参数必须为≥1的整数") } # 计算理论n值 n_approx <- (1 + sqrt(1 + 24 * S)) / 6 # 生成两个候选n n1 <- floor(n_approx) n2 <- ceiling(n_approx) # 计算候选五边形数 p1 <- P_n(n1) p2 <- P_n(n2) # 对比距离返回结果 if (abs(p1 - S) <= abs(p2 - S)) { return(p1) } return(p2) }
测试示例
- 输入
nearest_pentagonal(17),返回12(与22距离相等,任选其一即可) - 输入
nearest_pentagonal(20),返回22 - 输入
nearest_pentagonal(5),返回5 - 输入
nearest_pentagonal(1),返回1
内容的提问来源于stack exchange,提问作者youfacejaraxxus
相关产品推荐
相关产品推荐

