Cod sursa(job #183419)

Utilizator katakunaCazacu Alexandru katakuna Data 22 aprilie 2008 08:36:10
Problema Indep Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb
#include<stdio.h>
#include<math.h>


void ad(int *A, int *B)
{
      int i, t = 0;
      for (i=1; i<=A[0] || i<=B[0] || t; i++, t/=10)
	      A[i] = (t += A[i] + B[i]) % 10;
      A[0] = i - 1;
}


void sc(int *A, int *B)
{
      int i, t = 0;
      for (i = 1; i <= A[0]; i++)
	      A[i] += (t = (A[i] -= B[i] + t) < 0) * 10;
      for (; A[0] > 1 && !A[A[0]]; A[0]--);
}


void inm(int *A, int B)
{
      int i, t = 0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
	      A[i] = (t += A[i] * B) % 10;
      A[0] = i - 1;
}





int  UNU[5]={1,1,0,0,},aux2,res[1005],AA[1005],l,ok2,aux,ok,d,m,p,i,v[1110],max,j;

char ap[1111],t[1111];
int P[1111],A[1006];
long long n,a[1010],nrf;


int main(){


FILE *f=fopen("indep.in","r");
fscanf(f,"%lld",&n);

  for(i=1;i<=n;i++){
  fscanf(f,"%d",&v[i]);

   if(v[i]>max)
   max=v[i];

  }

fclose(f);


   for(i=1;i<=max;i++){
     for(j=1;j<=n;j++){

       if(!(v[j]%i))
       a[i]++;


     }

   }


   for(i=2;i<=max;i++){
    if(!t[i])
      for(j=i+i;j<=max;j+=i)
      t[j]=1;

   }


p=0;

   for(i=2;i<=max;i++)
   if(!t[i]){
   p++;
   P[p]=i;
   }


  for(i=1;i<=max;i++){

   if(a[i]){
   nrf=0;
   aux=i;
   ok=1;
   d=1;
   m=0;

     while(aux!=1&&d<=p){
     ok2=1;
     m=0;

       while(!(aux%P[d])){

	if(ok2)
	nrf++;

       m++;

       aux/=P[d];
       }

      if(m>1){
      ok=0;
      break;
      }


     d++;
     }


     if(ok){

      if(aux>1)
      nrf++;

      if(nrf%2==1){

      A[0]=1;
      A[1]=1;

	for(l=2;l<=1000;l++){
	A[l]=0;
	AA[l]=0;
	}

	for(l=1;l<=a[i];l++)
	inm(A,2);

	AA[1]=AA[0]=0;

       aux2=a[i];

	 while(aux2!=0){
	 AA[0]++;
	 AA[AA[0]]=aux2%10;
	 aux2/=10;
	 }

	//a[i]


	sc(A,UNU);
	sc(A,AA);


      sc(res,A);

      }

      else{

      A[0]=1;
      A[1]=1;

	  for(l=2;l<=1000;l++){
	  A[l]=0;
	  AA[l]=0;
	  }

      AA[1]=AA[0]=0;


	for(l=1;l<=a[i];l++)
	inm(A,2);

	sc(A,UNU);

	aux2=a[i];


	while(aux2){
	AA[0]++;
	AA[AA[0]]=aux2%10;
	aux2/=10;
	}



	sc(A,AA);


      ad(res,A);


      }


     }


   }


  }



FILE *g=fopen("indep.out","w");

for(i=res[0];i>=1;i--){
fprintf(g,"%d",res[i]);
}

fclose(g);

return 0;
}