Cod sursa(job #80090)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 26 august 2007 00:09:28
Problema Indep Scor 15
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<stdio.h>
long int i,j,n,nd[1001],a[1001],d[5][1001],cit,p,q,r,s,cont[1001],binar[502],
p2[502],sol[502],poz;
int main()
{
	FILE *f,*g;f=fopen("indep.in","r");g=fopen("indep.out","w");fscanf(f,"%ld",&n);
	for(i=1;i<=1000;i++) a[i]=i;
	for(i=2;i<=1000;i++) if(a[i]>1) for(j=i;j<=1000;j=j+i){ nd[j]++;d[nd[j]][j]=i;while(a[j]%i==0)a[j]/=i;}
	for(i=1;i<=n;i++)
	{  fscanf(f,"%ld",&cit);
	   if(cit>1)
	    { if(nd[cit]==1){ p=d[1][cit];cont[p]++;}
	      else
	       if(nd[cit]==2){p=d[1][cit];q=d[2][cit];cont[p]++;cont[q]++;cont[p*q]++;}
	       else
		if(nd[cit]==3){ p=d[1][cit];q=d[2][cit];r=d[3][cit];cont[p]++;cont[q]++;cont[r]++;cont[p*q]++;cont[p*r]++;cont[q*r]++;}
		else { p=d[1][cit];q=d[2][cit];r=d[3][cit];s=d[4][cit];cont[p]++;cont[q]++;cont[r]++;cont[s]++;cont[p*q]++;cont[p*r]++;cont[q*r]++;cont[p*s]++;cont[q*s]++;cont[r*s]++;cont[p*q*r]++;cont[p*q*s]++;cont[p*r*s]++;cont[q*r*s]++;cont[p*q*r*s]++;}
	    }
	}
	for(i=0;i<n;i++)binar[i]=1;
	for(i=2;i<=1000;i++)if(cont[i]){ if(nd[i]%2)for(j=0;j<cont[i];j++)binar[j]--;else for(j=0;j<cont[i];j++)binar[j]++;}
	for(i=0;i<=500;i++){ while(binar[i]<0){ binar[i]+=2;binar[i+1]--;}while(binar[i]>1){ binar[i]-=2;binar[i+1]++;}}
	p2[0]=1;
	for(i=0;i<=500;i++){ if(binar[i]){ for(j=0;j<=500;j++)sol[j]+=p2[j];for(j=0;j<=500;j++){sol[j+1]+=sol[j]/10;sol[j]%=10;}}for(j=0;j<=500;j++)p2[j]*=2;for(j=0;j<=500;j++){p2[j+1]+=p2[j]/10;p2[j]%=10;}}
	poz=500;
	while(!sol[poz])poz--;
	if(poz==-1) fprintf(g,"0\n");
	else
	 { for(i=poz;i>=0;i--)
	    fprintf(g,"%ld",sol[i]);
	    fprintf(g,"\n");
	 }
	fcloseall();
	return 0;
}