Cod sursa(job #179510)

Utilizator moga_florianFlorian MOGA moga_florian Data 15 aprilie 2008 23:19:09
Problema Factoriale Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
#include<math.h>
#define base 10000

int prime[30], Nprime=0;
int frecv[30];
int sol[128], Nsol=1;

int is_prime(int X){

    for(int i=2;i<=(int)sqrt((double)X);i++)
        if(X%i==0)
            return 0;
    return 1;

}

int main(){

    FILE *fin = fopen("factoriale.in","r"),
         *fout = fopen("factoriale.out","w");

    int N,K;
    fscanf(fin,"%d%d",&N,&K);

    //preproc
    for(int i=2;i<=100;i++)
        if(is_prime(i))
            prime[++Nprime] = i;

    for(int i=1;i<=N;i++){

        int varza,VAL;
        fscanf(fin,"%d",&VAL);

        for(int p=1;p<=Nprime;p++){
            varza = VAL;
            while(varza){
                frecv[p] += varza / prime[p];
                varza /= prime[p];
            }
        }

    }

    sol[Nsol] = 1;
    for(int i=1;i<=Nprime;i++)
        if(frecv[i]%K){
            int k,t;
            for(int p=1; p<=K-(frecv[i]%K); p++){
                for(k=1,t=0;k<=Nsol || t;k++, t/=base)
                    sol[k] = (t+=sol[k]*prime[i]) % base;
                Nsol = k-1;
            }

        }

    fprintf(fout,"%d",sol[Nsol]);
    for(int i=Nsol-1;i;i--)
        fprintf(fout,"%04d",sol[i]);
    fprintf(fout,"\n");

    fclose(fin);
    fclose(fout);
    return 0;
}