Cod sursa(job #2172295)

Utilizator ovidius11Stiriu Ovidius ovidius11 Data 15 martie 2018 15:58:19
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<cstdio>
#include<cmath>
#define base 10000000
int prim[105],v[105],primcnt[105],rasp[100005];
int pri(int num){
int i,lim=(int)sqrt((double)num);
for(i=2;i<=lim;i++)
if (num%i==0)
return 0;
return 1;}
int calc(int n,int p){
int rez=0,cp=p;
while(cp<=n){
rez=rez+n/cp;
cp=cp*p;}
return rez;}
int mult(int nr){
int i,t=0;
for(i=1;i<=rasp[0] || t;i++){
rasp[i]=rasp[i]*nr+t;
t=rasp[i]/base;
rasp[i]=rasp[i]%base;}
rasp[0]=i-1;}
int mul(int nr,int cat){
for(int i=1;i<=cat;i++)
mult(nr);}
int main(){
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);
int n,k,i,u=0,j;
scanf("%d%d",&n,&k);
for(i=1;i<=n;i++)
scanf("%d",&v[i]);
for(i=2;i<=100;i++)
if (pri(i))
prim[++u]=i;
for(i=1;i<=n;i++)
for(j=1;j<=u;j++)
primcnt[j]=primcnt[j]+calc(v[i],prim[j]);
rasp[0]=1;
rasp[1]=1;
for(j=1;j<=u;j++)
if (primcnt[j]%k!=0)
mul(prim[j],k-primcnt[j]%k);
printf("%d",rasp[rasp[0]]);
for(i=rasp[0]-1;i>=1;i--)
printf("%07d",rasp[i]);
return 0;}