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

问题描述 投票:-1回答:2

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级奖金的概率是多少?计算理论值。这个我很困惑如何计算。

r
2个回答
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

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)
© www.soinside.com 2019 - 2024. All rights reserved.