Cod sursa(job #1832793)

Utilizator Andrei1998Andrei Constantinescu Andrei1998 Data 20 decembrie 2016 22:49:09
Problema Factoriale Scor 0
Compilator java Status done
Runda Arhiva de probleme Marime 1.75 kb
import java.util.*;
import java.lang.*;
import java.io.*;
import java.math.*;

class Main {
	static ArrayList <ArrayList <Integer> > divs;
	
	static int[] factors = new int[105];
	
	static void addFactorial(int nr) {
	    for (int i = 1; i <= nr; ++ i) {
	        int i2 = i;
	        for (Integer it: divs.get(i))
	            while (i2 % it == 0) {
	                i2 /= it;
	                factors[it] ++;
	            }
	    }
	}
	
	public static void main (String[] args) throws java.lang.Exception {
        Scanner sc = new Scanner(new FileInputStream("factoriale.in"));
        PrintWriter pw = new PrintWriter("factoriale.out");
        
        //Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();
        int K = sc.nextInt();
        
        divs = new ArrayList<ArrayList <Integer> >(101);
        for (int i = 0; i <= 100; ++ i)
            divs.add(new ArrayList <Integer>());
            
        for (int i = 2; i <= 100; ++ i)
            if (divs.get(i).size() == 0)
                for (int j = i; j <= 100; j += i)
                    divs.get(j).add(i);
        
        for (int i = 0; i <= 100; ++ i)
            factors[i] = 0;
            
        while (N > 0) {
            N --;
            int val;
            val = sc.nextInt();
            addFactorial(val);
        }
        
        BigInteger ans = BigInteger.ONE;
        for (int i = 1; i <= 100; ++ i) {
            factors[i] %= K;
            factors[i] = K - factors[i];
            factors[i] %= K;
            
            for (int j = 0; j < factors[i]; ++ j)
                ans = ans.multiply(BigInteger.valueOf(i));
        }
        
        pw.println(ans);
        //System.out.println(ans);
	}
}