我在做欧拉计划的problem 5。我试图将另一个用户的Python代码转换成R,但是输出是不同的。你知道吗
Python脚本的输出是232792560
,其中R脚本的输出是1964187225
错误在哪里?你知道吗
Python代码:
def is_prime(number):
for n in range(2, number):
if number % n != 0:
n += 1
else:
return False
return True
def smallest_multiple(num):
exp = 1
result = 1
for i in range(2, num):
if is_prime(i):
while True:
if i**exp > num:
result *= i**(exp-1)
break
exp += 1
exp = 1
return result
print(smallest_multiple(20))
R代码:
is_prime <- function(num) {
for (n in seq(2, num)) {
if (num %% n != 0) {
n <- n + 1
} else {
return(FALSE)
}
return(TRUE)
}
}
lcm <- function(num) {
exp <- 1
result <- 1
for (i in seq(2, num)) {
if (is_prime(i)) {
while (TRUE) {
if (i ^ exp > num) {
result <- result * i ^ (exp - 1)
break
}
exp <- exp + 1
}
exp <- 1
}
}
return(result)
}
lcm(20)
你的解决方案有两个问题。你知道吗
首先,R中的
seq
包含端点;Python中的range
不包含端点。此外,Python中的range(2, 1)
是一个空范围,而R中的seq(2, 1)
产生结果2 1
。因此,有必要修改Ris_prime
函数以显式检查输入是否为2。你知道吗其次,R中的
is_prime
函数在for
循环中有return (TRUE)
,此时它应该在外(只有当一个数不能被任何小于它的数整除时,它才是素数)。你知道吗这将起作用:
输出:
您的代码还有其他一些奇怪的地方;例如,您不需要手动将1添加到
n
,您只需检查n
的平方根,偶数就会立即消失。然而,这些问题更多的是效率问题,而不是正确性问题。你知道吗相关问题 更多 >
编程相关推荐