Cod sursa(job #349356)

Utilizator MKLOLDragos Ristache MKLOL Data 19 septembrie 2009 10:31:59
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>

struct pro{
    int nr,div;} v[101];
int a[20000]={1,1};
int N,K,p,rez=1;

void pow(int l[],int T)
{

    for(int i=1;i<=a[0];++i)
    a[i]=a[i]*T;
    for(int i=1;i<=a[0];++i)
    {
        if(a[i]>9)
        {
            a[i+1]=a[i]/10+a[i+1];
            a[i]=a[i]%10;
            if(a[0]<i+1)
            ++a[0];

        }
    }

}

void desc(int K)
{
    int i=K,S=0,o,x;

    while(i)
    {
        S=S+v[i].nr;
        x=i;
        o=2;
        while(x!=1)
        {
            while(x%o==0&&x!=1)
            {
                x=x/o;
                v[o].div=v[o].div+S;
            }
            ++o;
        }
        --i;

    }

}

int main()
{
freopen("factoriale.in","r",stdin);
freopen("factoriale.out","w",stdout);

scanf("%d%d",&N,&K);

for(int i=1;i<=N;++i)
{
scanf("%d",&p);
++v[p].nr;
}

for(int i=100;i>=1;--i)
    if(v[i].nr>=1)
    {
    desc(i);
    i=0;
    }
    for(int i=1;i<=100;++i)
    if(v[i].div%K!=0)
    {
        for(int j=1;j<=(v[i].div%K)>=1;++j)
        {        pow(a,i);
        ++v[i].div;
        }
    }

for(int i=a[0];i>=1;--i)
printf("%d",a[i]);

}