Pseudo-random-looking one-to-one int32->int32 function

algorithm, bijection, integer, random

Solution

Multiply by a large odd number and xor with a different one.

Bijection: odd numbers have a multiplicative inverse modulo powers of two, so the multiplication is undone by a multiplication by the inverse. And xor is, of course, undone by another xor.

This is basically how the linear congruence pseudo random number generator works.

Problem

I am looking for a int32->int32 function that is - bijection (one-to-one correspondence) - cheap to calculate at least in one direction - transforms the increasing sequence 0, 1, 2, 3, ... into a sequence looking like a good pseudo-random sequence (~ half bits flip when argument changes by a small number, no obvious patterns)

Original source

Related problems