Java Program to Generate Random Numbers Using Multiply with Carry Method
Last Updated :
14 Mar, 2023
In computer science, multiply-with-carry (MWC) is a method invented by George Marsaglia for generating sequences of random integers based on an initial set from two to many thousands of randomly chosen seed values. The main advantage of the MWC method is that it invokes simple computer integer arithmetic and leads to the very fast generation of sequences of random numbers with immense periods, ranging from around 260 to 22000000.
Example:
Input : Length = 5
Output: 1581 16 1932 1969 1384
Input : Length = 2
Output: 985 3568
Formula used:
x(n) = (a*x(n-r) + c(n-1))mod n
c(n) = (a*x(n-r) + c(n-1))/n
where,
- a is any multiplier,
- m is modulus,
- c is carry, and
- r is a initial number of seeds.
Java
import java.util.Random;
public class Main {
public static void main(String args[])
{
int Maximum_Sequence_Elements = 10 ;
Random random = new Random();
int Base = 2000 ;
int Multiplier = random.nextInt(Base);
int r = 1 ;
int [] c = new int [Maximum_Sequence_Elements];
int [] x = new int [Maximum_Sequence_Elements];
c[ 0 ] = random.nextInt(Multiplier);
x[ 0 ] = random.nextInt(Base);
System.out.print( "The random number sequence is: "
+ x[ 0 ]);
for ( int i = 1 ; i < Maximum_Sequence_Elements;
i++) {
x[i]
= (Multiplier * x[i - r] + c[i - 1 ]) % Base;
c[i]
= (Multiplier * x[i - r] + c[i - 1 ]) / Base;
System.out.print( " " + x[i]);
}
}
}
|
Output
The random number sequence is: 508 1021 1549 857 414 1187 1425 1557 1945 1922
Time Complexity: O(Maximum_Sequence_Elements)
Auxiliary Space: O(Maximum_Sequence_Elements)
Share your thoughts in the comments
Please Login to comment...