41 lines
683 B
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
|
|
}
|