function U = js_randv(i, x)

%js_randv Pseudo Random Number Vector Generator

% Returns a pseudo random number vector

% according to congruential random number generator

% i = length of vector

% x = seed value of sequence

% U = vector of Xi+1 = (a * Xi) mod m

isFirst = 0;

a = 16807; % 7^5 predetermined multiplicative value

m = 2147483647; % 2^31-1 predetermined prime number

r = 2836; % m div a

q = 127773; % m mod a

T = zeros(1, i); % holds seed values

U = zeros(1, i); % holds returned uniform random numbers in (0,1)

% loop through all indices of vector

for j=1:i

% if this is the first value, use seed

if isFirst == 0

seed = (a * mod(x, q)) - (r * (x / q));

T(1, j) = seed;

isFirst = 1;

% if this is not the first value, use current index

else

previousValue = T(1, j-1);

seed = (a * mod(previousValue, q)) - (r * (previousValue / q));

T(1, j) = seed;

end

U(1, j) = seed / m;

end

end