Cod sursa(job #1475239)

Utilizator hrazvanHarsan Razvan hrazvan Data 23 august 2015 18:03:53
Problema Sandokan Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#define MAXN 5000
#define MOD 2000003

int fr[MAXN + 1];

inline void add(int n, int ad){
  int i;
  for(i = 2; i * i <= n; i++){
    while(n % i == 0){
      fr[i] += ad;
      n /= i;
    }
  }
  if(n > 1){
    fr[n] += ad;
  }
}

inline void comb(int n, int k){
  int i;
  for(i = 2; i <= n; i++)
    add(i, 1);
  for(i = 2; i <= k; i++)
    add(i, -1);
  for(i = 2; i <= n - k; i++)
    add(i, -1);
}

int main(){
  FILE *in = fopen("sandokan.in", "r");
  int n, k, cn, ck, i;
  fscanf(in, "%d%d", &n, &k);
  fclose(in);
  cn = n - 1;
  ck = n % (k - 1);
  if(ck == 0)
    ck = k - 1;
  ck--;
  if(ck > 0)
    comb(cn, ck);
  long long rez = 1;
  for(i = 2; i <= MAXN; i++){
    while(fr[i]){
      rez *= i;
      rez %= MOD;
      fr[i]--;
    }
  }
  FILE *out = fopen("sandokan.out", "w");
  fprintf(out, "%d", rez);
  fclose(out);
  return 0;
}