import Ġkotlin . math . sqrt Ċ Ċ enum Ġclass ĠClassification Ġ{ ĊĠĠĠ ĠDEF IC IENT , ĠPER F ECT , ĠAB UND ANT Ċ } Ċ Ċ fun Ġclassify ( x : ĠInt ): ĠClassification Ġ{ ĊĠĠĠ Ġrequire ( x Ġ> Ġ 0 ) ĊĠĠĠ Ġval Ġs Ġ= Ġfactors ( x ). sum () ĊĊĠĠĠ Ġreturn Ġwhen Ġ( s ) Ġ{ ĊĠĠĠĠĠĠĠĠ 1 Ġ-> ĠClassification . DEF IC IENT ĊĊĠĠĠĠĠĠĠ Ġin Ġ 2 .. x Ġ-> Ġif Ġ( s Ġ== Ġx ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClassification . PERF ECT ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClassification . DEF IC IENT ĊĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠClassification . AB UND ANT ĊĠĠĠ Ġ} Ċ } Ċ Ċ private Ġfun Ġfactors ( x : ĠInt ): ĠList < Int > Ġ{ ĊĠĠĠ Ġval Ġresult Ġ= Ġmutable ListOf ( 1 ) ĊĊĠĠĠ Ġ( 2 .. x . sqrt ()). forEach Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( x Ġ% Ġit Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( x Ġ/ Ġit Ġ!= Ġit ) Ġresult . add ( x Ġ/ Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġresult Ċ } Ċ Ċ private Ġfun ĠInt . sqrt () Ġ= ĊĠĠĠ Ġsqrt ( this . toDouble ()). toInt () Ċ