Cod sursa(job #1429988)

Utilizator hrazvanHarsan Razvan hrazvan Data 7 mai 2015 18:15:29
Problema Factoriale Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>
#define MAXL 10000
int pr[100], p[100], dr = 0;
int rez[MAXL], drez = 0;

inline void prod(int x){
  int i, tr = 0;
  for(i = 0; i < drez; i++)
    rez[i] *= x;
  for(i = 0; i < drez; i++){
    rez[i] += tr;
    tr = rez[i] / 10;
    rez[i] %= 10;
  }
  while(tr > 0){
    rez[i] = tr % 10;
    tr /= 10;
    i++;
  }
  drez = i;
}

inline void precalc(){
  int i, j;
  char g;
  for(i = 2; i < 100; i++){
    g = 0;
    for(j = 2; j * j <= i && !g; j++){
      if(i % j == 0)
        g = 1;
    }
    if(!g){
      pr[dr] = i;
      dr++;
    }
  }
}

int main(){
  FILE *in = fopen("factoriale.in", "r");
  int n, k, i, j, l, cj, x;
  fscanf(in, "%d%d", &n, &k);
  precalc();
  for(i = 0; i < n; i++){
    fscanf(in, "%d", &x);
    for(j = 2; j <= x; j++){
      cj = j;
      for(l = 0; l < dr; l++){
        while(cj % pr[l] == 0){
          cj /= pr[l];
          p[l]++;
        }
      }
    }
  }
  fclose(in);
  for(i = 0; i < dr; i++)
    p[i] = (k - p[i] % k) % k;
  rez[0] = 1;
  drez = 1;
  for(i = 0; i < dr; i++){
    for(; p[i] > 0; p[i]--)
      prod(pr[i]);
  }
  FILE *out = fopen("factoriale.out", "w");
  for(i = drez - 1; i >= 0; i--)
    fputc(rez[i] + '0', out);
  fclose(out);
  return 0;
}