Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.37 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.Arrays;
  4. import java.util.HashSet;
  5. import java.util.Iterator;
  6.  
  7.  
  8.  
  9.  
  10. /**
  11.  * 10892 - LCM Cardinality
  12.  * @author mohammadkotb
  13.  *
  14.  */
  15. public class LCMCardinality {
  16.  
  17.     boolean[] p;
  18.     int[] primes;
  19.     int size;
  20.     int max;
  21.    
  22.     public void generate() {
  23.         max = 1000000;
  24.         p = new boolean[max];
  25.         primes = new int[max];
  26.        
  27.         Arrays.fill(p, true);
  28.         for (int i = 4; i < p.length; i+=2) {
  29.             p[i] = false;
  30.         }
  31.         p[0] = false; p[1] = false;
  32.         size = 0;
  33.         primes[size++] = 2;
  34.        
  35.         for (int i = 3; i < p.length; i+=2) {
  36.             if (p[i]) {
  37.                 primes[size++] = i;
  38.                 for (int j = 2*i; j < p.length; j+=i) {
  39.                     p[j] = false;
  40.                 }
  41.             }
  42.         }
  43.     }
  44.    
  45.    
  46.     public void run() {
  47.         try {
  48.             BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
  49.            
  50.             generate();
  51.             while (true) {
  52.                 int n = Integer.parseInt(in.readLine().trim());
  53.                 if (n == 0) {
  54.                     return;
  55.                 }
  56.                 System.out.println(n + " " + solve(n));
  57.             }
  58.         } catch (Exception e) {
  59.             e.printStackTrace();
  60.         }
  61.     }
  62.    
  63.     int[] divisors;
  64.     int dsz;
  65.     int[] pows;
  66.     int mx;
  67.    
  68.     public int solve(int n) {
  69.         int num = n;
  70.         int index = 0;
  71.         pows = new int[size];
  72.         while (num > 1) {
  73.             while (num % primes[index] == 0) {
  74.                 num /= primes[index];
  75.                 pows[index]++;
  76.             }
  77.             index++;
  78.             mx = index;
  79.         }
  80.        
  81.         divisors = new int[max];
  82.         dsz = 0;
  83.         div = new HashSet<Integer>();
  84.         rec(1, 0);
  85.        
  86.         Iterator<Integer>itr = div.iterator();
  87.         while(itr.hasNext()) {
  88.             divisors[dsz++] = itr.next();
  89.         }
  90.        
  91.         int counter = 0;
  92.        
  93.         for (int i = 0; i < dsz; i++) {
  94.             for (int j = i; j < dsz; j++) {
  95.                 if (lcm(divisors[i], divisors[j]) == n) {
  96.                     counter++;
  97.                 }
  98.             }
  99.         }
  100.         return counter;
  101.     }
  102.    
  103.     HashSet<Integer> div;
  104.     public void rec(int curr, int ind) {
  105.         if (ind > mx) return;
  106.         if (pows[ind] == 0) {
  107.             rec(curr, ind+1);
  108.             return;
  109.         }
  110.        
  111.         for (int i = 0; i <= pows[ind]; i++) {
  112.             int val = (int)Math.pow(primes[ind], i);
  113.             val *= curr;
  114. //          divisors[dsz++] = val;
  115.             div.add(val);
  116.             rec(val, ind+1);
  117.         }
  118.     }
  119.    
  120.    
  121.     public int lcm(int a, int b) {
  122.         return a/gcd(a,b) * b;
  123.     }
  124.    
  125.     public int gcd(int a, int b) {
  126.         int r = a%b;
  127.         while (r!=0) {
  128.             a = b;
  129.             b = r;
  130.             r = a%b;
  131.         }
  132.         return b;
  133.     }
  134.    
  135.    
  136.     public static void main(String[] args) {
  137.         new LCMCardinality().run();
  138.     }
  139. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement