在R中使用while循环查找完美数字

时间:2017-09-08 03:24:18

标签: r

我试图找到完美的号码。 完美的数字是它的因子(包括1)的总和等于它自己。 我需要找到第一个和第二个完美数字6和28。 所以我从2号开始直到找到2个完美数字。 这是代码:

num.perfect <- 2
count <- 0
iter <- 2
while(count < num.perfect)
  {
  divisor <- 1
  for(i in 2:iter)  #find the factors of a number
    {
    if(iter%%i==0)
    {
      divisor <- c(divisor, i)
    }
    }# end for loop
  if(sum(divisor)==iter)      #print the perfect number
    {
      print(paste(iter, " is a perfect number", sep=""))
    count <- count + 1
  } # end if
  iter <- iter +1
} # end while loop

但是循环继续运行并且不会停止。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用此代码,看看它是否符合您的要求:

facs=function(n) head((1:n)[n%%(1:n)==0],-1)
 perf=function(x){
 k=numeric(x)
   m=i=0
   while(m<x){
      i=i+1
      if(sum(facs(i))==i){m=m+1;k[m]=i}
  }
 k
}
perf(4)
# [1] 6 28 496 8128