/***************************************
*                                      *
*   Copyright (c) 1998 Jean-Eric Pin   *
*   All rights reserved.               *
*                                      *
*   TAB = 2 spaces                     *
*                                      *
***************************************/

/*-------------------------------------------------------------------
 * Arithmetique.c    Jean-Eric Pin 18/03/98
 * Fonctions arithmetiques elementaires. Utilisees seulement pour
 * le calcul de la taille des monoides In et POIn, donc pour de petites valeurs
 * Ne pas utiliser a d'autres fins (risques de depassement)
 * Evite le recours a une bibliotheque specialisee
 *-------------------------------------------------------------------
 */     

#include <stdlib.h>
#include <stdio.h>
#include "Arithmetique.h"

int Factorial(int n)
{
  int F = 1;
  int i;
  
  for (i = 2; i <= n; i++)
    F *= i;
  return F;
}

int Binomial(int n, int k)
{
  int B = 1;
  int i;
  
  for (i = n; i > n-k; i--)
    B *= i;
  return (B / Factorial(k));
}

int Stirling(int n)
{
  int S = 0;
  int k;
  
  for (k = 0; k <= n; k++)
  {
    int B = 1;
    int i;
    
    for (i = n; i > n-k; i--)
      B *= i;
    B = B * B;
    S = S + B / Factorial(k);
  }
  return S;
}