Cod sursa(job #2873138)

Utilizator tedicTheodor Ciobanu tedic Data 18 martie 2022 18:32:34
Problema Factoriale Scor 40
Compilator cpp-64 Status done
Runda concursceva1 Marime 2.07 kb
#include <fstream>

using namespace std;
ifstream cin("factoriale.in");
ofstream cout("factoriale.out");
bool ciur[100005];
int ciur2[100005];
int maxx=0;
int v2[10005],v[10005];
void AtribMic(int x[], int m)
{
    x[0]=0;
    if(m==0)
        x[(x[0]=1)]=0;
    else
        for(; m; m/=10)
            x[++x[0]]=m%10;
}
void ProdusMare(int x[], int y[])
{
    int l,r,t=0;
    int z[10005];

    z[0]=x[0]+y[0]-1;

    for(l=1; l<=x[0]+y[0]; l++)
        z[l]=0;
    for(l=1; l<=x[0]; l++)
        for(r=1; r<=y[0]; r++)
            z[l+r-1]+=x[l]*y[r];

    for(l=1; l<=z[0]; l++)
    {
        t+=z[l];
        z[l]=t%10;
        t/=10;
    }
    if(t)
        z[++z[0]]=t;

    for(l=0; l<=z[0]; l++)
        x[l]=z[l];
}
int main()
{

    ciur[0] = 1;
    ciur[1] = 1;
    for(int i = 2; i < 10000; i++)
        if(ciur[i] == 0)
            for(int j = i * i; j < 100000; j = j + i)
                ciur[j] = 1;
    int n,k,a,p=1,j;
    cin>>n>>k;
    int divizor,exp;
    for(int i=0; i<n; i++)
    {
        cin>>a;
        for(int cj=2; cj<=a; cj++)
        {
            j=cj;
            divizor = 2;
            while(divizor * divizor <= j)
            {
                exp = 0;
                while(j % divizor == 0)
                {
                    j = j / divizor;
                    exp++;
                }
                if(exp > 0)
                {
                    ciur2[divizor]+=exp;
                    maxx=max(maxx,divizor);
                }
                divizor++;
            }
            if(j > 1)
            {
                ciur2[j]++;
                maxx=max(maxx,j);
            }
        }
    }
    /// cout<<ciur2[2]<<"\n";
    v2[0]=1;
    v2[1]=1;
    for(int i=2; i<=maxx; i++)
    {
        /// cout<<i<<" "<<ciur2[i]<<'\n';
        p=1;
        while(ciur2[i]%k!=0)
        {
            ciur2[i]++;
            p*=i;
        }
        AtribMic(v,p);
        ProdusMare(v2,v);
    }
    for(int i=v2[0]; i>=1; i--)
        cout<<v2[i];
    return 0;
}