gpt4 book ai didi

r - 确定适当除数的算法

转载 作者:行者123 更新时间:2023-12-04 17:58:47 27 4
gpt4 key购买 nike

我有兴趣找到表现出其真除数之和等于该数字的性质的数字。第一个例子是 6,其中的真除数是 1 + 2 + 3 = 6。

我用 R 编写了以下代码,但我觉得它效率很低,可以显着改进。

propDivisor <- function(
max
)
{
n<-{}
for(j in 2:max){
m<-{}
for(i in 1:(j/2+1)){
if(j%%i==0){m<-c(m,i)}
}
if(sum(m)==j){n<-c(n,j)}
}
return(cat("The proper divisors between 1 and", max, "are", n, ".", sep=" ") )
}

有没有人对改进以下代码有任何建议?我觉得这里应该使用应用函数之一。也许这将是 future 一个体面的代码高尔夫练习?

据我所知,这在这里经常出现,这不是作业问题,只是今天早些时候一位同事提出的有趣编码挑战者的问题。

更新:

感谢大家对寻找更多信息的地方的评论和想法。这是另一个利用 sapply 的解决方案:
D <- function(n) sum((1:(n-1))[n%%1:(n-1)==0])==n
(2:9000)[sapply(2:9000,D)]

最佳答案

您正在寻找的称为完美数(真除数之和等于数字本身)。

如果您希望改进方法本身,see here .

要找到合适的除数,您应该改进,作为这样的开始:

  • 您的循环可以停在 sqrt(max)
  • 每次你找到一个除数 i 时,max/i 也是一个除数,除非 max/i == i 那么它不应该被计算在内。
  • 关于r - 确定适当除数的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3137168/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com