Cod sursa(job #658981)

Utilizator CS-meStanca Marian Ciprian CS-me Data 9 ianuarie 2012 21:00:30
Problema Factoriale Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include<stdio.h>
#include<string.h>
FILE *fin=fopen("factoriale.in","r");
FILE *fout=fopen("factoriale.out","w");
int prim[]={0,2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
int exp[30],rez[100000],n,k,i,j,p,x;

void X_mic(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 void mul(int a[],int x)
{
int t=0,i=1;
    for(;i<=a[0] || t;++i,t/=10)
    {
        a[i]=(t+=a[i]*x)%10;
    }
    a[0]=i-1;
}

int main(){

    fscanf(fin,"%d %d",&n,&k);

    for(i=1;i<=n;i++){
        fscanf(fin,"%d",&x);

        for(j=1;prim[j]<=x && j<=25;j++){
            p=prim[j];
            while(p<=x){
                exp[j]+=x/p;
                p*=p;
            }
        }
    }

    for(i=1;i<=25;i++){
        if(exp[i]%k>0){
            exp[i]=k-( exp[i]%k );
        }
        else exp[i]=0;
    }

    rez[1]=1;
    rez[0]=1;

    for(i=1;i<=25;i++){
        for(p=1;p<=exp[i];p++){
            mul(rez,prim[i]);
        }
    }

    for(i=rez[0];i>=1;i--){
        fprintf(fout,"%d",rez[i]);
    }


return 0;
}