Cod sursa(job #140328)

Utilizator testelatugelu testelatu testelatu Data 21 februarie 2008 19:20:47
Problema Factoriale Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include<stdio.h>
#define nmax 100
int a[nmax];
int b[nmax];
int sol[nmax];

void inmulteste(int sol[nmax], int nr)
{
      int i, t = 0;
      for (i = 1; i <= sol[0] || t; i++, t /= 10)
              sol[i] = (t += sol[i] * nr) % 10;
      sol[0] = i - 1;
}


int main()
{
 freopen("factoriale.in","r",stdin);
 freopen("factoriale.out","w",stdout); 
 
 int n,k;
    
 long long solutie=1;    
    
 int i,j,aux,aux1; 
 int maxim1=0,maxim2=0;
   
 scanf("%d%d",&n,&k);
 
 for(i=1; i<=n; ++i){
 scanf("%d",&aux);
 a[aux]=1;
 
 if( aux >maxim1)
 maxim1=aux;
 }
 
        for(i=maxim1,j=0; i>1; --i){ 
        if( a[i] )
        ++j;
        
        a[i]=j;
        }
        
 for(i=2; i<=nmax && a[i]; ++i){
 
 if( !b[i])
 
   for(j=i+i,aux1=2; j<=maxim1 && j<=nmax; j+=i,++aux1){
   b[j]=1; 
   a[i]+=(aux1*a[j]);
   }
}  

 sol[0]=1;
 sol[1]=1;
        
        for(i=2; i<=nmax && i<=maxim1; ++i)    
           if( a[i] && !b[i]){
            
            if( a[i]!=k)
           { 
            if( a[i]<k )
            inmulteste(sol, (k-a[i])*i); 
            else
            if(a[i]>k){
             aux=a[i]%k;
            if( aux ){
             aux1=aux;
             while( aux1%k )
             ++aux1;
             
            inmulteste(sol,(aux1-aux)*i); 
            }
                       }
            }
            
}
             
for(i=sol[0]; i>0; --i)
printf("%d",sol[i]);
printf("\n");

    return 0;
}