Cod sursa(job #138867)

Utilizator sarabogdanSara Nicolae Bogdan sarabogdan Data 19 februarie 2008 13:30:46
Problema Factoriale Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.55 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++)
                      {
                          sol[1]*=i;
                          if (sol[1]>9)
                          {
                                       
                                       sol[2]+=sol[1]/10;
                                       for (q = 2 ; q <= 100 ; q++)
                                       {
                                           sol[0] = q;
                                           if (sol[q]>9)
                                           {
                                                        sol[0] = q+1;
                                                        sol[q+1] += sol[q]/10;
                                                        sol[q]%=10;
                                           }
                                           else
                                               break;
                                       }
                                                        
                                       sol[1]%=10;
                          }
                      }
        }
                                       
                                       
                          
                          
        
    }  
    for (j = sol[0] ; j >= 1 ; j--)
        printf("%d",sol[j]);
    return 0;
}