Cod sursa(job #1143614)

Utilizator alevasluialeHuhurez Marius alevasluiale Data 15 martie 2014 19:14:25
Problema Factoriale Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#include <bitset>
using namespace std;
bitset <110> v;
int l[59],o[59];
int A[100010];
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;
}
void ciur()
{
    int i,j;
    l[++l[0]]=2;
    for(i=3;i*i<110;i+=2)
    {

        for(j=i*i;j<110;j+=i) v[j]=1;
    }
    for(i=3;i<110;i+=2) if(!v[i]) l[++l[0]]=i;
}
int main()
{
    freopen("factoriale.in","r",stdin);
    freopen("factoriale.out","w",stdout);
    int n,i,k,z,r,q,u,d;
    scanf("%d%d",&n,&k);
    ciur();
    A[++A[0]]=1;
    for(i=0;i<n;i++)
    {
        scanf("%d",&z);
        for(r=2;r<=z;r++)
        {
            u=r;
            d=1;
            while(u>1)
            {
                q=0;
                while(u%l[d]==0)
                {
                    q++;
                    u/=l[d];
                }
                o[l[d]]+=q;
                d++;
            }

        }
    }
    for(i=2;i<=59;i++)
    {
          if(o[i]%k!=0)  for(r=1;r<=k-o[i]%k;r++) mul(A,i);
    }

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