WallHero

Punto Seis

Aug 24th, 2020 (edited)
78
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.Scanner;
  4. import java.util.Iterator;
  5.  
  6. public class PuntoSeis {
  7.  
  8.     static Scanner scanner = new Scanner(System.in);
  9.     static Map<Long, Integer> F = new HashMap<Long, Integer>();
  10.    
  11.     static void fact(long n)
  12.     {
  13.         F.clear();
  14.         for(long p = 2; p*p <= n; p++)
  15.         {
  16.             while(n%p == 0)
  17.             {
  18.  
  19.                 F.put(p, (F.containsKey(p)) ? F.get(p)+1 : 1);
  20.                 n/=p;
  21.             }
  22.         }
  23.         if(n> 1) F.put(n, (F.containsKey(n)) ? F.get(n)+1 : 1);
  24.     }
  25.    
  26.     static long exp(long b, long e)
  27.     {
  28.         long ans = 1;
  29.         while(e > 0)
  30.         {
  31.             if(e%2 == 1) ans*=b;
  32.             b=b*b;
  33.             e>>=1;
  34.         }
  35.         return ans;
  36.     }
  37.    
  38.     static long sumDiv(long n){
  39.         fact(n);
  40.         long ans = 1;
  41.         Iterator<Long> it = F.keySet().iterator();
  42.        
  43.         while(it.hasNext())
  44.         {
  45.             Long p = it.next();
  46.             ans *= (exp(p, F.get(p)+1)-1)/(p-1);   
  47.         }
  48.         return ans;
  49.     }
  50.    
  51.     public static void main(String[] args) {
  52.        
  53.        
  54.         try
  55.         {
  56.             long n = Long.parseLong(scanner.next());
  57.             System.out.println((sumDiv(n)-n) == n ? "Es número perfecto." : "No es número perfecto");
  58.         }
  59.         catch (Exception e) {
  60.             System.out.println("Se introdujo un número inválido, reintente.");
  61.             main(args);
  62.         }
  63.  
  64.     }
  65. }
RAW Paste Data