FileDocCategorySizeDatePackage
Permuter.javaAPI DocSun JDK 1.4.2 Example3678Thu May 12 00:35:28 BST 2005None

Permuter

public class Permuter extends Object
An object that implements a cheesy pseudorandom permutation of the integers from zero to some user-specified value. (The permutation is a linear function.)
version
1.6 01/23/03
author
Josh Bloch

Fields Summary
private int
modulus
The size of the permutation.
private int
multiplier
Nonnegative integer less than n that is relatively prime to m.
private int
addend
Pseudorandom nonnegative integer less than n.
Constructors Summary
public Permuter(int n)


       
        if (n<0) {
            throw new IllegalArgumentException();
	}
        modulus = n;
        if (n==1) {
            return;
	}

        // Initialize the multiplier and offset
        multiplier = (int) Math.sqrt(n);
        while (gcd(multiplier, n) != 1) {
            if (++multiplier == n) {
                multiplier = 1;
	    }
	}
    
Methods Summary
private static intgcd(int a, int b)
Calculate GCD of a and b, which are assumed to be non-negative.

        while(b != 0) {
            int tmp = a % b;
            a = b;
            b = tmp;
        }
        return a;
    
public static voidmain(java.lang.String[] args)
Simple test. Takes modulus on command line and prints out permutation.

        int modulus = Integer.parseInt(args[0]);
        Permuter p = new Permuter(modulus);
        for (int i=0; i<modulus; i++) {
            System.out.print(p.map(i)+" ");
	}
        System.out.println();
    
public intmap(int i)
Returns the integer to which this permuter maps the specified integer. The specified integer must be between 0 and n-1, and the returned integer will be as well.

        return (multiplier * i + addend) % modulus;