嵌套循环实现的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
相关产品推荐
相关产品推荐

