Cod sursa(job #652475)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 24 decembrie 2011 17:17:28
Problema Factoriale Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
FILE *f=fopen("factoriale.in","r");
FILE *g=fopen("factoriale.out","w");
int n,k,s[111],t,p[31],w[101][101];
bool pr[101];

void ciur(){
	for(register int i=2;i<=97;i++){
		if(pr[i]==false){
			p[++t]=i;
			for(register int j=i+i;j<=97;j+=i)
				pr[j]=true;
		}
	}
}

long long up(long long a,int b){
	register long long aux;
	if(b==0)
		return 1;
	else{
		aux=up(a,b/2);
		aux*=aux;
		if(b%2==0)
			return aux;
		else
			return aux*a;
	}
}

int main(void){
	register int i,j,x;
	
	fscanf(f,"%d %d",&n,&k);
	ciur();
	
	for(i=2;i<=100;i++){
		x=i;
		for(register int z=1;z<=t;z++){
			w[i][p[z]]=w[i-1][p[z]];
			while(x%p[z]==0){
				x/=p[z];
				w[i][p[z]]++;
			}
		}
	}
	
	for(i=1;i<=n;i++){
		fscanf(f,"%d",&x);
		for(register int z=1;z<=t;z++){
			s[p[z]]+=w[x][p[z]];
		}
	}
	
	long long sol=1;
	for(i=1;i<=t;i++){
		int q=s[p[i]]%k;
		if(q!=0){
			sol*=up(p[i],k-q);
		}
	}
	
	fprintf(g,"%d",sol);
	fclose(f);
	fclose(g);
	return 0;	
}