Haskell - Nombres pseudoperfectes P92181


Statement
 

pdf   zip

Els divisors propis d’un nombre nn són tots els divisors positius de nn més petits que nn. Per exemple, els divisors propis de 20 són 1, 2, 4, 5, i 10. En aquest problema, direm que un nombre és pseudoperfecte si es pot obtenir sumant alguns (o tots) els seus divisors propis. Per exemple, 20 es pseudoperfecte, perquè 1+4+5+10=201 + 4 + 5 + 10 = 20.

Feu una funció

    analyze :: Int -> Either Int Bool

que, per a cada nombre n1n\ge1 donat,

  • si nn té més de 12 divisors propis, digui quants en té (amb un Left al Either);

  • si nn té 12 o menys divisors propis, digui si nn és pseudoperfecte o no (amb un Right al Either).

Puntuació

  • Test1:   Entrades amb nn menor que 10000.

  • Test2:   Entrades qualssevol.

Public test cases
  • Input

    analyze 1
    analyze 6
    analyze 10
    analyze 20
    analyze 210
    analyze 2310
    analyze 65536
    analyze 1000000000
    analyze 999999996
    analyze 999999937
    analyze 999999936
    

    Output

    Right False
    Right True
    Right False
    Right True
    Left 15
    Left 31
    Left 16
    Left 99
    Right True
    Right False
    Left 167
    
  • Information
    Author
    Jordi Petit
    Language
    Catalan
    Official solutions
    Haskell
    User solutions
    Haskell