Cod sursa(job #1810616)

Utilizator Liviu_Ionut_MoantaMoanta Ionut Liviu Liviu_Ionut_Moanta Data 20 noiembrie 2016 12:57:05
Problema Factoriale Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
#include<algorithm>
#include<bitset>
using namespace std;
ifstream fin ("factoriale.in");
ofstream fout("factoriale.out");
 long long sol,a,b,p[103],e[103],i,j,k,t,n,v[103];
bitset<103>f;
long long putere(long long a,long long b){
    if(b==0){
        return 1;
    }
    long long p=1;
    while(b!=0){
        if(b%2==1){
            p=p*a;
        }
        a=a*a;
        b/=2;
    }
    return p;
}
long long exp(long long nfact,long long prim){
    long long r=0;
    long long prod=prim;
    while(prod<=nfact){
        r+=nfact/prod;
        prod*=prim;
    }
    return r;
}
int main(){
    fin>>n>>t;
    for(i=1;i<=n;i++){
        fin>>v[i];
    }
    k=0;
    for(i=2;i<=v[n];i++){
        if(f[i]==0){
            p[++k]=i;
            for(j=i+i;j<=v[n];j+=i){
                f[j]=1;
            }
        }
    }
    p[++k]=v[n]+1;
    for(j=1;j<=n;j++){
        for(i=1;p[i]<=v[j];i++){
            e[i]+=exp(v[j],p[i]);
        }
    }
    sol=1;
    for(i=1;i<=k-1;i++){
        if(e[i]%t!=0){
            sol*=putere(p[i],t-(e[i]%t));
        }
    }
    fout<<sol;
    return 0;
}