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

如何用R语言编写脚本计算100以内素数 数值小于2时返回false

原有代码问题梳理
  • 缺失输入边界校验:没有先判断输入值是否小于2,不满足需求要求的输入小于2返回false的规则
  • return 放置位置错误:循环内第一轮到i=2时就会执行return(pnums)直接终止函数,后续所有逻辑都不会运行,只会返回[1] 2
  • 素数判断逻辑完全失效:首先仅判断模2不等于0不能判定是素数(比如9模2不等于0但不是素数),其次判断模2的代码放在了return(pnums)之后,永远不会被执行
  • 逻辑冲突:函数同时存在返回素数向量和返回布尔值的逻辑,没有做场景区分,运行逻辑混乱
正确实现方案

以下代码完全匹配需求:输入数字若小于2返回FALSE,输入≥2时返回所有小于等于输入值的素数向量,逻辑直白适合新手理解:

prime_numbers <- function(x) {
  # 输入边界校验:小于2直接返回FALSE
  if (x < 2) {
    return(FALSE)
  }
  # 初始化存储素数的空向量
  pnums <- c()
  # 遍历所有2到x的待判断数字
  for (n in 2:x) {
    is_prime <- TRUE
    # 素数判断规则:只要n能被2到平方根(n)之间的任意整数整除,就不是素数
    for (i in 2:sqrt(n)) {
      if (n %% i == 0) {
        is_prime <- FALSE
        break # 找到因数后直接跳出内层循环,减少无效运算
      }
    }
    # 确认是素数后加入结果向量
    if (is_prime) {
      pnums <- c(pnums, n)
    }
  }
  return(pnums)
}

# 测试调用
# 输入小于2的情况
prime_numbers(1) # 返回 FALSE
# 输出10以内素数
prime_numbers(10) # 返回 2 3 5 7
# 输出100以内素数
prime_numbers(100)

如果需要处理更大的数值,可改用埃拉托斯特尼筛法提升效率,上述实现对于100以内素数筛选的性能完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:27:03