Générateur de nombres aléatoires simples et spéciaux

Comment créer une fonction qui à chaque appel génère de façon aléatoire un nombre entier? Ce nombre doit être le plus aléatoire possible (en fonction distribution uniforme). Il n'est autorisé à utiliser une variable statique, et d'au plus 3 étapes élémentaires, où chaque étape se compose d'une seule opération arithmétique de base de arité 1 ou 2.

Exemple:

int myrandom(void){
  static int x;
  x = some_step1;
  x = some_step2;
  x = some_step3;
  return x;
}

Des opérations arithmétiques de base sont +,-,%,and, not, xor, ou vers la gauche maj, maj de droite, de multiplication et de division. Bien sûr, pas de rand(), random() ou les trucs similaires est autorisé.

source d'informationauteur psihodelia