解题思路

  • 暴力搜索每个数的约数然后求和最后看是否满足条件,满足条件就添加到数组中,然后统计数组的长度
  • 优化方法就是添加一些条件让循环次数减少
package main

import(
    "fmt"
)

func main(){
    var num int
    for{
    if n,_ := fmt.Scan(&num); n == 0{
        return
    }
    nums :=make([]int,0)
    // 数值递增 1,2,3,4....n
    for i := 1;i<num;i++{
        s := 0
        // 对数求真因子
        for j := 1;j<i;j++{
            if i%j == 0{
                s += j
            }
        }
        //是否满足真因子的和等于它本身
        if s == i{
            nums = append(nums,s)
        }
    }
    fmt.Println(len(nums))
    }
}