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