Cod sursa(job #250967)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 1 februarie 2009 14:48:48
Problema Factoriale Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <string.h>

int prim[100],x,n,k,i,d,e,j,rez,max;

void fact(int a)
{
    e=0;
    d=2;
    while(a%d==0)
    {
        a/=d;
        e++;
    }
    if (e>0)
    prim[d]+=e;
    d=3;
    while(a!=1)
    {
        e=0;
        while(a%d==0)
        {
            a/=d;
            e++;
        }
        if (e>0)
        prim[d]+=e;
    d+=2;
    }
}

int power(int a, int b)
{
    if (b==1) return a;
    else
    if (b%2==0) {x=power(a,b/2);return x*x;}
    else
    if (b%2==1) {x=power(a,b/2);return x*x*a;}
}


int main()
{
    freopen("factoriale.in","r",stdin);
    freopen("factoriale.out","w",stdout);
    scanf("%d %d",&n,&k);
    memset(prim,0,sizeof(prim));
    for (i=1;i<=n;++i)
    {
        scanf("%d", &x);
        for (j=2;j<=x;++j)
              fact(j);
    }
    rez=1;
    for (i=2;i<=100;++i)
          if (prim[i]>0)
               if (prim[i]%k!=0)
                   rez*=power(i,k-prim[i]%k);
    printf("%lld", rez);               
    return 0;
}