Cod sursa(job #2523288)

Utilizator mihnea03Ciocioiu Mihnea mihnea03 Data 13 ianuarie 2020 21:41:50
Problema Factoriale Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <fstream>
#define dim 110
using namespace std;
int a[dim];
int f[dim];
int e[dim];
int pr[dim];
int sol[dim];
int i,j,n,u,k;

void calcularePrime (int pr[],int nr) {
    for (i=2;i<=nr;i++) {
        if (f[i]==0) {
            j=i+i;
            while (j<=nr) {
                f[j]=1;
                j+=i;
            }
            pr[++u]=i;
        }
    }
}

void produs (int a[],int p) {
    int t=0;
    for(int i=1;i<=a[0];i++){
        a[i]=a[i]*p+t;
        t=a[i]/10;
        a[i]%=10;
    }
    for(;t;t/=10)
        a[++a[0]]=t%10;
}

int exponent (int x,int p) {
    int prod=p;
    int s=0;
    while (prod<=x) {
        s+=x/prod;
        prod*=p;
    }
    return s;
}

int main() {
    ifstream fin("factoriale.in");
    ofstream fout("factoriale.out");
    fin>>n>>k;
    for (i=1;i<=n;i++) {
        fin>>a[i];
    }
    calcularePrime(pr,110);
    for (i=1;i<=n;i++) {
        for (j=1;j<=u;j++) {
            e[j]+=exponent(a[i],pr[j]);
        }
    }
    sol[0]=1;
    sol[1]=1;
    for (i=1;i<=u;i++) {
        if (e[i]==0) break;
        while (e[i]%k!=0) {
            produs(sol,pr[i]);
            e[i]++;
        }
    }
    for (i=sol[0];i>=1;i--) {
        fout<<sol[i];
    }
  /*  for (i=1;i<=u;i++) {
        fout<<pr[i]<<" ";
    } */
    return 0;
}