Cod sursa(job #703828)

Utilizator ephgstefana gal ephg Data 2 martie 2012 14:47:21
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>
#include <bitset>
using namespace std;
bitset <105> a;
int c[105],puteri[105],psec[105],prime[50],dim,af[105];

void desc (int n){
	int i;
	if(a[n]!=0)
		puteri[n]=0;
	for(i=1;i<=dim&&n!=1;++i){
		for(;n%prime[i]==0;){
			
			n/=prime[i];
			++puteri[prime[i]];
		}
	}
}

void inm (int i){
	int j,t=0;
	for(j=1;j<=af[0];++j){
		af[j]=af[j]*i+t;
		t=af[j]/10;
		af[j]=af[j]%10;
	}
	for(;t;){
		af[++af[0]]+=t%10;
		t/=10;
	}
}
int main () {
	int n,i,k,j,x;
	
	freopen("factoriale.in","r",stdin);
	freopen("factoriale.out","w",stdout);
	scanf("%d %d",&n,&k);
	for(i=1;i<=n;++i)scanf("%d",&c[i]);
	for(i=2;i*i<=100;++i){
		if (a[i]==0)for(j=i+i;j<=100;j+=i)a[j]=1;
	}
	a[1]=1;
	for(i=1;i<=100;++i)if(a[i]==0)prime[++dim]=i;
	//fprintf(stderr,"%d\n",dim);
	//for(i=1;i<=dim;++i)fprintf(stderr,"%d ",prime[i]);
	for(i=1;i<=n;++i){
		for(j=1;j<=100&&c[i]>=j;++j){
			desc(j);
		}
	}
	//for(i=2;i<=10;++i)fprintf(stderr, "%d ",puteri[i]);
	af[0]=1;
	af[1]=1;
	for(i=1;i<=100;++i){
		if(puteri[i]!=0)
		if(puteri[i]%k!=0){
			x=k-puteri[i]%k;
			for(;x;){
				inm(i);
				--x;
			}
		}
	}
				
		

	for(i=af[0];i;--i)printf("%d",af[i]);
	return 0;
}