Cod sursa(job #138883)

Utilizator sarabogdanSara Nicolae Bogdan sarabogdan Data 19 februarie 2008 13:51:22
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.44 kb
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#define N 101

int a[N] , b[N] , c[N];
int n , i , j , k  , q;
int sol[101];


int main()
{
    freopen("factoriale.in","r",stdin);
    freopen("factoriale.out","w",stdout);
    
    
    scanf("%d%d",&n,&k);
    b[1] = b[0] = 1;
    for (i = 2 ; i <= N ; ++i)
    {
        if (b[i]==0)
        {
                    c[0]++;
                    c[c[0]] = i;
                    for (j = 2*i ; j <= N ; j+=i)
                        b[j] = 1;
        }
    }
    
    
    for (i = 1 ; i <= n ; i++)
    {
        int t;
        scanf("%d",&t);
        for (int q = 2 ; q <= t ; q++)
        {
            int aux = q;
        for (j = 1 ; j <= c[0] ; j++)
        {
            
            while(aux%c[j]==0)
            {
                            a[c[j]]++;
                            aux/=c[j];
            }
        }
        }
    }
    

        
    sol[0] = 1;
    sol[1] = 1;
    for (i = 1 ; i <= N ; i++)
    {
        if (a[i]%k!=0&&a[i]!=0)
        {
                      long long p = a[i];
                      while(p%k != 0)
                                   p++;
                     
                     
                      for (j = 1 ; j <= p-a[i] ; j++)
                      {
                         
                          for (q = 1; q <= sol[0] ; q++)
                              sol[q]*=i;
                            
                          for (q = 1 ; q <= sol[0] ; q++)
                          {
                                          
                                           if (sol[q]>9)
                                           {
                                                        if ((q+1) > sol[0])
                                                           sol[0] = q + 1;
                                                        sol[q+1] += sol[q]/10;
                                                        sol[q]%=10;
                                           }
                                           
                          }
                      }
                     
                      
        }
                                       
                                       
                          
                          
        
    }  
    for (j = sol[0] ; j >= 1 ; j--)
        printf("%d",sol[j]);
    return 0;
}