Cod sursa(job #1111520)

Utilizator DaNutZ2UuUUBB Bora Dan DaNutZ2UuU Data 18 februarie 2014 22:05:45
Problema Factoriale Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include<fstream>
using namespace std;
int n,K,sol[100010];
int prime[55],nrp,Exp[55];
bool ciur[110];

inline void Inmulteste(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;
}

inline bool Da(int A[], int x)
{
    for(int i = 1; i <= x; i++)
        cout << ciur[i]<<" ";

}

int main()
{
    int i,j,p,X;
    prime[++nrp]=2;
    for(i=3;i<100;i+=2)
    {
        if(!ciur[i])
        {
            prime[++nrp]=i;
            for(j=i*i;j<100;j+=2*i)
                ciur[j]=true;
        }
    }
    ifstream fin("factoriale.in");
    fin>>n>>K;
    while(n--)
    {
        fin>>X;
        for(i=1;i<=nrp;i++)
        {
            p=prime[i];
            while(X>=p)
            {
                Exp[i]+=X/p;
                p*=prime[i];
            }
        }
    }
    fin.close();

    sol[0]=sol[1]=1;
    for(i=1;i<=nrp;i++)
    {
        Exp[i]%=K;
        if(Exp[i])
        {
            Exp[i]=K-Exp[i];
            for(j=1;j<=Exp[i];j++)
                Inmulteste(sol,prime[i]);
        }
    }

    ofstream fout("factoriale.out");
    for(i=sol[0];i>0;i--)
        fout<<sol[i];
    fout<<"\n";
    fout.close();
    return 0;
}