将一个数字除以R中的数字数组

时间:2018-03-05 00:31:32

标签: r

2520是可以除以每个的最小数字 数字从1到10没有任何余数。使用循环找出1到20之间所有数字可分割的最小正数(我们的意思是余数应为0)?

到目前为止,我有以下代码,但它不起作用:

divisors = seq(1:20)
divisors

num1 = 2520

while(TRUE){
    if (num1 %% divisors == 0){
      print(num1)
      break
    }
    num1 = num1+ 1
}  

我还需要帮助计算R中的概率, 平均需要多少抽奖才能获得一等奖A?为此,请生成1000个游戏并使用向量记录绘制数量。 为此,我有以下代码:

set.seed(1)
random_games <- sample(c('A','B'), size=1000, replace=T, prob=c(0.2,0.8))
random_games

在5个平局内获得A级奖金的概率是多少?计算理论值。 这个我对如何计算感到困惑。

2 个答案:

答案 0 :(得分:1)

当您检查1:20的余数时,结果会得到20个布尔值 - 您必须确保它们都是TRUE。您可以使用all

执行此操作
divisors = seq(1:20)
divisors

num1 = 2520

while(TRUE){
  if (all(num1 %% divisors == 0)){
    print(num1)
    break
  }
  num1 = num1+ 1
}  

或做

gcd <- function(x, y) {
  while (y) {
    z = x %% y
    x = y
    y = z
  }
  return (x)
}

Reduce(function(x, y) x * y %/% gcd(x, y), 3:20)

答案 1 :(得分:1)

由于看起来while循环确实需要很长时间来解决问题,我们将调用gcd和lcm的递归:

gcd=function(x){
  w=1:min(x)
 max(w[sapply(w,function(y)all(!x%%y))])
}

lcm=function(x){
  if(length(x)>2) lcm(c(prod(x[1:2])/gcd(x[1:2]),x[-(1:2)]))
   else prod(x)/gcd(x)
}

 lcm(c(1:20))
[1] 232792560