Pagini recente » Cod sursa (job #2508722) | Cod sursa (job #601473) | Borderou de evaluare (job #484967) | Cod sursa (job #595432) | Cod sursa (job #179510)
Cod sursa(job #179510)
#include<stdio.h>
#include<math.h>
#define base 10000
int prime[30], Nprime=0;
int frecv[30];
int sol[128], Nsol=1;
int is_prime(int X){
for(int i=2;i<=(int)sqrt((double)X);i++)
if(X%i==0)
return 0;
return 1;
}
int main(){
FILE *fin = fopen("factoriale.in","r"),
*fout = fopen("factoriale.out","w");
int N,K;
fscanf(fin,"%d%d",&N,&K);
//preproc
for(int i=2;i<=100;i++)
if(is_prime(i))
prime[++Nprime] = i;
for(int i=1;i<=N;i++){
int varza,VAL;
fscanf(fin,"%d",&VAL);
for(int p=1;p<=Nprime;p++){
varza = VAL;
while(varza){
frecv[p] += varza / prime[p];
varza /= prime[p];
}
}
}
sol[Nsol] = 1;
for(int i=1;i<=Nprime;i++)
if(frecv[i]%K){
int k,t;
for(int p=1; p<=K-(frecv[i]%K); p++){
for(k=1,t=0;k<=Nsol || t;k++, t/=base)
sol[k] = (t+=sol[k]*prime[i]) % base;
Nsol = k-1;
}
}
fprintf(fout,"%d",sol[Nsol]);
for(int i=Nsol-1;i;i--)
fprintf(fout,"%04d",sol[i]);
fprintf(fout,"\n");
fclose(fin);
fclose(fout);
return 0;
}