Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 用给定的最大因子求公共因子之和_R_Computer Science - Fatal编程技术网

R 用给定的最大因子求公共因子之和

R 用给定的最大因子求公共因子之和,r,computer-science,R,Computer Science,问题是: 如何创建具有两个输入的函数,即向量(v)和整数(n)。输出应该是小于或等于给定整数的所有值的总值,该整数至少是向量任何一个输入的一个因子 我最初是从写作开始的 Integer=函数(n){ n_值=总和(0:n) 返回值(n_值) } 然而,我不知道这是否让我走错了路。任何帮助和指导都将不胜感激Total\u sum也许您可以尝试下面的代码 Total_sum <- function(n,v){ sum = 0 #initialize a sum variable

问题是:

如何创建具有两个输入的函数,即向量(v)和整数(n)。输出应该是小于或等于给定整数的所有值的总值,该整数至少是向量任何一个输入的一个因子

我最初是从写作开始的

Integer=函数(n){
n_值=总和(0:n)
返回值(n_值)
}

然而,我不知道这是否让我走错了路。任何帮助和指导都将不胜感激

Total\u sum也许您可以尝试下面的代码

Total_sum <- function(n,v){
  
  sum = 0 #initialize a sum variable
  
  for (i in (1:n)){ #take each integer to n 
    
    for (item in v){ #take each item in the input vecto
       
      if (i %% item == 0){ #check if the particular integer (to the n counter) is a multiple of item via the modulo operator
        sum = sum + i #if yes, add it up to the sum
      }
    }
  }
  return(sum)
}
sum_mult <- function(n, v) sum(seq(n)[rowSums(sapply(v, function(x) seq(n) %% x) == 0) > 0])

更新 如果要计算公共倍数一次或多次

sum_mult <- function(n, v) sum(sapply(v, function(x) sum(seq(n)[seq(n) %% x==0])))

社区鼓励为问题添加解释,而不是发布纯粹的代码答案(请参阅)。我尝试的所有迭代似乎都有效,代码中的路标帮助我理解。必须将sum=0才能开始求和?另外,“item”纯粹是另一个变量,比如“i”,所以本质上我们不需要定义向量本身。我想这是我浪费时间的地方。sum_mult(100,c(3,4,5))不应该打印[1]4033吗?其他人也一样。@HarrisonKeese我不知道你是想数一次普通倍数还是数几次。如果您想要的输出是后一种情况,您应该尝试更新答案。我在输入'sum_mult(100,c(2,4,6,11))作为示例时发现,答案不正确。它返回504211而不是272775…@HarrisonKeese您想只计算一次公共倍数还是多次?在你的帖子里没有澄清。如果您尝试我的第一个解决方案,它会给出
272775
。我的第二个解决方案给出的结果与您接受的答案相同,但您说它是不正确的。我很困惑…抱歉,第一个答案是正确的,但我没有意识到在问题中我不应该重复相同的因素。第一个答案是正确的。道歉。
sum_mult <- function(n, v) sum(sapply(v, function(x) sum(seq(n)[seq(n) %% x==0])))
> sum_mult(5, c(2, 3))
[1] 9

> sum_mult(10, c(3, 5))
[1] 33

> sum_mult(100, c(3, 4, 5))
[1] 4033