Cod sursa(job #1424209)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 23 aprilie 2015 18:42:21
Problema Factoriale Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#define BAZA 10
#define MAXX 100
#define MAXP 25
#define MAXC 100000
int a[MAXC+1], c[MAXX+1], v[MAXP], fr[MAXP], p;
inline void inmult(int a[], int x){
    int i, tr=0;
    for(i=1; i<=a[0]; i++){
        tr+=a[i]*x;
        a[i]=tr%BAZA;
        tr/=BAZA;
    }
    while(tr>0){
        a[++a[0]]=tr%BAZA;
        tr/=BAZA;
    }
}
inline void ciur(){
    int i, j;
    for(i=2; i*i<=MAXX; i++){
        if(c[i]==0){
            for(j=i*i; j<=MAXX; j+=i){
                c[j]=1;
            }
        }
    }
    for(i=2; i<=MAXX; i++){
        if(c[i]==0){
            v[p++]=i;
        }
    }
}
int main(){
    int n, k, i, x, j, t, cx;
    FILE *fin, *fout;
    fin=fopen("factoriale.in", "r");
    fout=fopen("factoriale.out", "w");
    fscanf(fin, "%d%d", &n, &k);
    ciur();
    for(j=0; j<n; j++){
        fscanf(fin, "%d", &x);
        for(i=0; i<p; i++){
            t=v[i];
            cx=x;
            while(cx>=t){
                fr[i]+=cx/t;
                t*=v[i];
            }
        }
    }
    a[++a[0]]=1;
    for(i=0; i<p; i++){
        fr[i]%=k;
        if(fr[i]!=0){
            for(j=0; j<k-fr[i]; j++){
                inmult(a, v[i]);
            }
        }
    }
    for(i=a[0]; i>0; i--){
        fputc(a[i]+'0', fout);
    }
    fputc('\n', fout);
    fclose(fin);
    fclose(fout);
    return 0;
}