# Maximum number of dots after throwing a dice N times

Given a dice with m-faces. The first face of the dice contains a dot, the second one contains two dots, and so on, the m-th face contains m dots. Each face appears with a probability . Our task is to calculate the expected maximum number of dots after tossing the dice times.

**Examples:**

Input: 2 2Output: 1.750000000000

Here the dice includes {1, 2}.

So, the sample space of throwing the dice two times =

{(1, 2), (1, 1), (2, 1), (2, 2)}

For (1, 2)–> maximum=2

For (1, 1)–> maximum=1

For (2, 2)–> maximum=2

For (2, 1)–> maximum=2

The probability of each outcome is 0.25,

that is, expectation equals to(2+1+2+2)*(0.25) = 7/4 = 1.750000000000

Input: 6 3Output: 4.958333333333

**Approach**:

The key observation in this problem is that no. of times a number can occur a maximum of times depending upon its previous number.

For i-th number, it will be .

Take m = 6, n = 2 as an instance.

Total numbers with a maximum =6 are equal to .

The total numbers with a maximum, 5 are equal to .

Similarly, we can find out for 4,3,2, and 1.

6 6 6 6 6 6

5 5 5 5 5 6

4 4 4 4 5 6

3 3 3 4 5 6

2 2 3 4 5 6

1 2 3 4 5 6

Enumerate the maximum number, the distribution will be an n-dimensional super-cube with m-length-side. Each layer will be a large cube minus a smaller cube.

So, our answer will be the sum of all i-th elements from 1 to m given by:

Calculating may cause overflow, so we could move the divisor into the sum and calculate instead.

## C++

`// CPP program for above implementation` `#include <bits/stdc++.h>` `using` `namespace` `std;` `// Function find the maximum expectation` `double` `expect(` `double` `m, ` `double` `n)` `{` ` ` `double` `ans = 0.0, i;` ` ` ` ` `for` `(i = m; i; i--)` ` ` `// formula to find the maximum number and` ` ` `// sum of maximum numbers` ` ` `ans += (` `pow` `(i / m, n) - ` `pow` `((i - 1) / m, n)) * i;` ` ` ` ` `return` `ans;` `}` `// Driver code` `int` `main()` `{` ` ` `double` `m = 6, n = 3;` ` ` `cout << expect(m, n);` ` ` `return` `0;` `}` |

## Java

`// Java program for above implementation` `class` `GFG` `{` `// Function find the maximum expectation` `static` `double` `expect(` `double` `m, ` `double` `n)` `{` ` ` `double` `ans = ` `0.0` `, i;` ` ` `for` `(i = m; i > ` `0` `; i--)` ` ` ` ` `// formula to find the maximum number` ` ` `// and sum of maximum numbers` ` ` `ans += (Math.pow(i / m, n) -` ` ` `Math.pow((i - ` `1` `) / m, n)) * i;` ` ` `return` `ans;` `}` `// Driver code` `public` `static` `void` `main(String[] args)` `{` ` ` `double` `m = ` `6` `, n = ` `3` `;` ` ` `System.out.println(String.format(` `"%.5f"` `,` ` ` `expect(m, n)));` `}` `}` `// This code is contributed by mits` |

## Python3

`# Python3 program for finding maximum` `# number of dots after throwing a` `# dice N times.` `# Function to find the maximum` `# expectation` `def` `expect(m,n) :` ` ` `ans ` `=` `0.0` ` ` `i ` `=` `m` ` ` `while` `(i):` ` ` ` ` `# formula to find the maximum` ` ` `# number and` ` ` `# sum of maximum numbers` ` ` `ans ` `+` `=` `(` `pow` `(i ` `/` `m, n) ` `-` `pow` `((i` `-` `1` `) ` `/` `m, n)) ` `*` `i` ` ` `i ` `-` `=` `1` ` ` `return` `ans` `# Driver code` `if` `__name__ ` `=` `=` `"__main__"` `:` ` ` ` ` `# multiple assignments` ` ` `m,n ` `=` `6` `,` `3` ` ` `# function calling` ` ` `print` `(expect(m,n))` |

## C#

`// C# program for above implementation` `using` `System;` `class` `GFG` `{` `// Function find the maximum expectation` `static` `double` `expect(` `double` `m, ` `double` `n)` `{` ` ` `double` `ans = 0.0, i;` ` ` `for` `(i = m; i > 0; i--)` ` ` ` ` `// formula to find the maximum number` ` ` `// and sum of maximum numbers` ` ` `ans += (Math.Pow(i / m, n) -` ` ` `Math.Pow((i - 1) / m, n)) * i;` ` ` `return` `ans;` `}` `// Driver code` `public` `static` `void` `Main()` `{` ` ` `double` `m = 6, n = 3;` ` ` `Console.WriteLine(expect(m, n));` `}` `}` `// This code is contributed` `// by Akanksha Rai` |

## PHP

`<?php` `// PHP program for above implementation` `// Function find the maximum expectation` `function` `expect(` `$m` `, ` `$n` `)` `{` ` ` `$ans` `= 0.0;` ` ` `for` `(` `$i` `= ` `$m` `; ` `$i` `; ` `$i` `--)` ` ` ` ` `// formula to find the maximum number` ` ` `// and sum of maximum numbers` ` ` `$ans` `+= (pow(` `$i` `/ ` `$m` `, ` `$n` `) -` ` ` `pow((` `$i` `- 1) / ` `$m` `, ` `$n` `)) * ` `$i` `;` ` ` ` ` `return` `$ans` `;` `}` `// Driver code` `$m` `= 6;` `$n` `= 3;` `echo` `expect(` `$m` `, ` `$n` `);` `// This code is contributed by ChitraNayal` `?>` |

## Javascript

`<script>` `// Javascript program for above implementation` ` ` ` ` `// Function find the maximum expectation` ` ` `function` `expect(m,n)` ` ` `{` ` ` `let ans = 0.0, i;` ` ` ` ` `for` `(i = m; i > 0; i--)` ` ` ` ` `// formula to find the maximum number` ` ` `// and sum of maximum numbers` ` ` `ans += (Math.pow(i / m, n) -` ` ` `Math.pow((i - 1) / m, n)) * i;` ` ` ` ` `return` `ans;` ` ` `}` ` ` ` ` `// Driver code` ` ` `let m = 6, n = 3;` ` ` ` ` `document.write(expect(m, n).toFixed(5))` ` ` `// This code is contributed by avanitrachhadiya2155` `</script>` |

**Output:**

4.95833

**Time Complexity:** O(m)

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced 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****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.