# Java Program to Generate Random Numbers Using Multiply with Carry Method

• Last Updated : 04 Dec, 2020

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:

Attention reader! Don’t stop learning now. Get hold of all the important Java Foundation and Collections concepts with the Fundamentals of Java and Java Collections Course at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

```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,

1.  a is any multiplier,
2.  m is modulus,
3.  c is carry, and
4.  r is a initial number of seeds.

## Java

 `// Java Program to generate a random numbers``// Based on Multiply with carry method``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``]);`` ` `        ``// generating sequence`` ` `        ``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`

My Personal Notes arrow_drop_up