Cod sursa(job #1143263)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 15 martie 2014 11:26:31
Problema Factoriale Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <bitset>
using namespace std;
short v[101];
short x[3]={2,3,7};
int A[1000];
void mul(int A[], int B)
{
      int i, t = 0;
      for (i = 1; i <= A[0] || t; i++, t /= 10)
              A[i] = (t += A[i] * B) % 10;
      A[0] = i - 1;
}
int main()
{
    freopen("factoriale.in","r",stdin);
    freopen("factoriale.out","w",stdout);
    int n,i,j,k,z,r,m,q,u,d,max=7;
    scanf("%d%d",&n,&k);
    A[++A[0]]=1;
    for(i=0;i<n;i++)
    {
        scanf("%d",&z);
        for(r=2;r<=z;r++)
        {
            u=r;
            d=0;
            while(u>1&&d<=2)
            {
                q=0;
                while(u%x[d]==0)
                {
                    q++;
                    u/=x[d];
                }
                v[x[d]]+=q;
                d++;
            }
            if(u>1) {v[u]++;if(u>max) max=u;}
        }
    }
    for(i=2;i<=max;i++)
    {
        if(v[i]<k&&v[i]!=0)
        {
            for(r=1;r<=k-v[i];r++) mul(A,i);
        }
        else if(v[i]>k&&v[i]%k!=0)
        {
            for(r=1;r<=k-v[i]%k;r++) mul(A,i);
        }
    }
    for(i=A[0];i>=1;i--) printf("%d",A[i]);
}