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