Haskell - Nombres pseudoperfectes P92181


Statement
 

pdf   zip

html

Els divisors propis d’un nombre n són tots els divisors positius de n més petits que n. 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 = 20.

Feu una funció

analyze :: Int -> Either Int Bool

que, per a cada nombre n≥1 donat,

  • si n té més de 12 divisors propis, digui quants en té (amb un Left al Either);
  • si n té 12 o menys divisors propis, digui si n és pseudoperfecte o no (amb un Right al Either).

Puntuació

  • Test1:   Entrades amb n menor que 10000.  50 Punts 
  • Test2:   Entrades qualssevol.  50 Punts 
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