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

嵌套循环实现的R语言质数函数返回错误结果求助

问题分析与修正方案

错误原因拆解

  • 过早追加元素导致非质数与重复值
    原代码在内层循环里,只要当前j不能整除i,就立刻把i塞进结果列表l。比如i=9时,j=2满足9%%2≠0,此时9就被误加入列表,但实际上j=3时9%%3=0,9是合数。另外,质数会被多次追加——比如i=7,j=2和j=3都不能整除它,就会被加两次,直接造成重复值。

  • 未校验内层循环的完整执行状态
    判断质数的核心逻辑是:所有小于等于其平方根的数都无法整除它。原代码只处理了“找到能整除的数就break”的情况,但没判断如果内层循环正常跑完(没触发break),才说明i是质数,此时才该加入列表。

修正后的代码

prime.numbers = function(n= 100){
  l=c()
  for (i in 3:n){
    is_prime = TRUE  # 默认当前数是质数
    for (j in 2:ceiling(sqrt(i))){
      if ((i %% j )== 0) {
        is_prime = FALSE  # 发现因数,标记为非质数
        break
      }
    }
    if (is_prime) {  # 内层循环结束后,确认是质数再加入
      l= append(l,i)
    }
  }
  return(l)
}

prime.numbers()

修正说明

  • 新增is_prime标记变量,先假设当前i是质数
  • 内层循环中只要找到能整除i的j,就标记为非质数并跳出循环
  • 内层循环结束后,仅当is_prime仍为TRUE时,才将i加入结果列表,彻底避免非质数和重复值问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 06:15:38