Cod sursa(job #378341)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 28 decembrie 2009 13:10:22
Problema Factoriale Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include<stdio.h>
#include<math.h>
int m[100001],n,k,f[101],f2[101];
void inmul (int b)
{
    int i;
    int x, t=0;
    for(i=1;i<=m[0] || t; i++)
    {
        if (i>m[0])
            m[i] = 0;
        x=m[i]*b+t;
        t=x/10;
        m[i]=x%10;
    }
    m[0]=i-1;
}
int prim (int x)
{
    int lim,d;
    if(x%2==0 && x!=2)
        return 0;
    lim=sqrt(x);
    for(d=3;d<=lim;d++)
        if(x%d==0)
            return 0;
    return 1;
}
int main ()
{
    int i,j,val,pr,rad,cj;
    freopen("factoriale.in","r",stdin);
    freopen("factoriale.out","w",stdout);
    scanf("%d%d",&n,&k);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&val);
        for(j=2;j<=val;j++)
            if(prim(j))
            {
                cj=j;
                while(val>=cj)
                {
                    f[j]+=(val/cj);
                    cj*=j;
                }  //while
            }   //if
    }   //for

    for(i=2;i<=97;i++)
    {
        if(f[i]==0 || f[i]>=k)
            continue;
        f2[i]=k-f[i];
    }

    m[0]=1;
    m[1]=1;
    
    for(i=2;i<=97;i++)
    {
        while(f2[i])
        {
            f2[i]--;
            inmul(i);
        }   //while
    }   // for

    for(i=m[0];i>=1;i--)
        printf("%d",m[i]);
    printf("\n");
    return 0;
}   //main