exercism/go/perfect-numbers/perfect_numbers.go

41 lines
683 B
Go

package perfect
import "errors"
type Classification int
const (
ClassificationPerfect = iota
ClassificationDeficient
ClassificationAbundant
)
const testVersion = 1
var ErrOnlyPositive error
func Classify(inp uint64) (Classification, error) {
ErrOnlyPositive = errors.New("Only Positive Allowed")
if inp <= 0 {
return 0, ErrOnlyPositive
}
factors := GetFactorSum(inp)
if factors > inp {
return ClassificationAbundant, nil
}
if factors < inp {
return ClassificationDeficient, nil
}
return ClassificationPerfect, nil
}
func GetFactorSum(inp uint64) uint64 {
var ret uint64
for i := uint64(1); i < inp; i++ {
if inp%i == 0 {
ret += i
}
}
return ret
}