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

杜德尼数输出不完整求助:仅显示前两个数,循环条件判定异常

修复R语言杜德尼数查找代码的问题

你的代码只输出前两个杜德尼数,核心问题有两个:

  • sum_of_digits未重置:这个变量在每次检查新的立方数前没有清零,导致后续循环不断累加之前所有符合条件数字的各位和,判断逻辑完全失效。
  • 浮点数精度隐患:nthroot(i,3)%%1==0 依赖浮点数运算,部分立方数可能因精度误差被误判(比如大数字的立方根计算)。

修正后的代码

for(i in 0:(54^3)){
  k <- round(i^(1/3))
  # 验证k是否为i的精确立方根,规避浮点数误差
  if(k^3 == i){
    sum_of_digits <- 0
    # 拆分数字并计算各位和
    digits <- strsplit(as.character(i), "")[[1]]
    sum_of_digits <- sum(as.numeric(digits))
    if(k == sum_of_digits){
      print(i)
    }
  }
}

关键修改说明

  1. 移除pracma依赖:改用整数运算验证立方根——先计算k为i的立方根近似值,再通过k^3 == i确认是否为精确立方数,彻底避免浮点数精度问题。
  2. 重置数字和变量:每次处理新的立方数时,先将sum_of_digits设为0,确保只计算当前i的各位数字和。
  3. 简化数字拆分逻辑:用strsplit直接拆分数字字符,比循环substr更简洁,也避免了循环计数的潜在错误。

运行修正后的代码,会输出全部7个杜德尼数:0、1、8、1729、4104、13832、20683。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:17:28