You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R语言的循环求解方程x+xy+y=54(x、y为正整数)

求解方程x+xy+y=54(正整数解)并实现R代码

数学推导

先对原方程变形:

x + xy + y = 54
两边加1后因式分解:
(x+1)(y+1) = 55

55的正整数因数对为(1,55)、(5,11)、(11,5)、(55,1)。由于x、y是正整数,x+1和y+1都必须≥2,因此排除(1,55)和(55,1)两组,剩下有效解:

  • x+1=5,y+1=11 → x=4,y=10,x+y=14
  • x+1=11,y+1=5 → x=10,y=4,x+y=14

最终x+y的固定值为14。


R代码实现

方法1:暴力枚举(新手友好,for循环)

直接遍历x的可能范围,计算对应y是否为正整数:

solutions <- list()

# x的最大可能值:当y=1时,x+x+1=54 → x≤26.5,所以遍历1到26即可
for (x in 1:26) {
  y <- (54 - x) / (1 + x)
  # 判断y是否为正整数
  if (y > 0 && y == as.integer(y)) {
    solutions[[length(solutions)+1]] <- list(x = x, y = y, x_plus_y = x + y)
  }
}

print(solutions)

方法2:基于因数分解(更高效)

利用方程变形后的因数关系直接计算:

# 找出55的所有正因数
factors <- which(55 %% 1:55 == 0)
# 筛选出≥2的因数(对应x+1的有效取值)
valid_factors <- factors[factors > 1]

solutions <- lapply(valid_factors, function(f) {
  f2 <- 55 / f
  if (f2 > 1) {
    x <- f - 1
    y <- f2 - 1
    list(x = x, y = y, x_plus_y = x + y)
  }
})

# 过滤空值并输出
solutions <- Filter(Negate(is.null), solutions)
print(solutions)

关于while循环的说明

while循环确实可以实现,但对于这个问题来说,for循环逻辑更清晰,无需额外维护终止条件。示例写法如下:

x <- 1
solutions <- list()
while (x <= 26) {
  y <- (54 - x)/(1 + x)
  if (y > 0 && y == as.integer(y)) {
    solutions[[length(solutions)+1]] <- list(x=x, y=y, x_plus_y=x+y)
  }
  x <- x + 1
}
print(solutions)

由于问题规模极小,三种方法的效率差异可以忽略,新手优先选择for循环即可。

内容的提问来源于stack exchange,提问作者mauri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 13:02:22