R语言高合成数判断代码中b <- c()语句的作用是什么?
R代码逻辑疑问解答
你提供的这段代码的作用是判断输入的正整数是否为高合成数,即该数的约数个数多于所有比它更小的正整数。针对你提出的两个问题解答如下:
1. b <- c()的作用
这行代码的作用是初始化一个空的向量容器。后续循环会计算1到n-1所有正整数的约数个数,这些结果都会被存入这个向量中,方便后续计算最大值做对比。
如果没有这行初始化语句,第一次循环执行b <- c(b, ...)时会因为变量b未定义直接报错。
2. b <- c(b, sum(p %% c(1:p) == 0))中c()内写入b的原因
R中c()函数的作用是拼接多个元素/向量为一个新的向量。这里把已有的b放在c()里,是为了将本次循环计算出的p的约数个数,追加到之前已经存储了更早数值约数个数的b向量末尾,实现结果的累加存储。
如果这里不写b,直接写成b <- c(sum(p %% c(1:p) == 0)),那么每次循环都会直接覆盖掉b之前的内容,最终循环结束后b里只会保留n-1这一个数的约数个数,就没法和所有更小的数的约数个数最大值做对比了。
可选优化提示
你当前的写法是每次循环都重新生成向量拼接,数据量大的时候效率较低,你可以提前指定向量长度优化性能,比如初始化时写成b <- integer(n-1),循环中直接用b[p] <- sum(p %% 1:p ==0)赋值即可,不需要反复拼接。
内容的提问来源于stack exchange,提问作者user16461886
相关产品推荐
相关产品推荐

