Cod sursa(job #703685)

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

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]];
		}
	}
}
			
int main () {
	int n,i,k,j;
	long long af=1;
	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]);
	for(i=1;i<=100;++i){
		if(puteri[i]%k!=0){
			if(a[i]==0){
				af*=(k-puteri[i]%k)*1LL*i;
			}
		}
				
		
	}
	printf("%lld",af);
	return 0;
}