# Stella Octangula Number

• Difficulty Level : Easy
• Last Updated : 15 Jul, 2021

Given a number n, check it is the Stella Octangula number or not. A number of the form where n is a whole number(0, 1, 2, 3, 4, …) is called Stella Octangula. First few Stella Octangula numbers are 0, 1, 14, 51, 124, 245, 426, 679, 1016, 1449, 1990, …
Stella octangula numbers which are perfect squares are 1 and 9653449.
Given a number x, check if it is Stella octangula.

Examples:

```Input: x = 51
Output: Yes
For n = 3, the value of expression
n(2n2 - 1) is 51

Input: n = 53
Output: No```

A simple solution is to run a loop starting from n = 0. For every n, check if n(2n2 – 1) is equal to x. We run the loop while value of n(2n2 – 1) is smaller than or equal to x.

An efficient solution is to use Unbounded Binary Search. We first find a value of n such that n(2n2 – 1) is greater than x using repeated doubling. Then we apply Binary Search.

## C++

 `// Program to check if a number is Stella``// Octangula Number``#include ``using` `namespace` `std;` `// Returns value of n*(2*n*n - 1)``int` `f(``int` `n) {``   ``return` `n*(2*n*n - 1);``}` `// Finds if a value of f(n) is equal to x``// where n is in interval [low..high]``bool` `binarySearch(``int` `low, ``int` `high, ``int` `x)``{``    ``while` `(low <= high) {``        ``long` `long` `mid = (low + high) / 2;` `        ``if` `(f(mid) < x)``            ``low = mid + 1;``        ``else` `if` `(f(mid) > x)``            ``high = mid - 1;``        ``else``            ``return` `true``;``    ``}``    ``return` `false``;``}` `// Returns true if x isStella Octangula Number.``// Else returns false.``bool` `isStellaOctangula(``int` `x)``{``    ``if` `(x == 0)``      ``return` `true``;` `    ``// Find 'high' for binary search by``    ``// repeated doubling``    ``int` `i = 1;``    ``while` `(f(i) < x)``        ``i = i*2;` `    ``// If condition is satisfied for a``    ``// power of 2.``    ``if` `(f(i) == x)``        ``return` `true``;` `    ``//  Call binary search``    ``return` `binarySearch(i/2, i, x);``}` `// driver code``int` `main()``{``    ``int` `n = 51;``    ``if` `(isStellaOctangula(n))``        ``cout << ``"Yes"``;``    ``else``        ``cout << ``"No"``;` `    ``return` `0;``}`

## Java

 `// Program to check if``// a number is Stella``// Octangula Number``import` `java.io.*;` `class` `GFG``{` `// Returns value of``// n*(2*n*n - 1)``static` `int` `f(``int` `n)``{``    ``return` `n * (``2` `* n *``                ``n - ``1``);``}` `// Finds if a value of``// f(n) is equal to x``// where n is in``// interval [low..high]``static` `boolean` `binarySearch(``int` `low,``                            ``int` `high,``                            ``int` `x)``{``    ``while` `(low <= high)``    ``{``        ``int` `mid = (low + high) / ``2``;` `        ``if` `(f(mid) < x)``            ``low = mid + ``1``;``        ``else` `if` `(f(mid) > x)``            ``high = mid - ``1``;``        ``else``            ``return` `true``;``    ``}``    ``return` `false``;``}` `// Returns true if x``// is Stella Octangula``// Number.Else returns``// false.``static` `boolean` `isStellaOctangula(``int` `x)``{``    ``if` `(x == ``0``)``    ``return` `true``;` `    ``// Find 'high' for``    ``// binary search by``    ``// repeated doubling``    ``int` `i = ``1``;``    ``while` `(f(i) < x)``        ``i = i * ``2``;` `    ``// If condition is``    ``// satisfied for a``    ``// power of 2.``    ``if` `(f(i) == x)``        ``return` `true``;` `    ``// Call binary search``    ``return` `binarySearch(i / ``2``,``                        ``i, x);``}` `// Driver code``public` `static` `void` `main (String[] args)``{``    ``int` `n = ``51``;``    ``if` `(isStellaOctangula(n))``        ``System.out.print(``"Yes"``);``    ``else``        ``System.out.print(``"No"``);``}``}` `// This code is contributed``// by anuj_67.`

## Python3

 `# Python3 program to check if a number``# is Stella octangula number` `# Returns value of n*(2*n*n - 1)``def` `f(n):``    ` `    ``return` `n ``*` `(``2` `*` `n ``*` `n ``-` `1``);` `# Finds if a value of f(n) is equal to x``# where n is in interval [low..high]``def` `binarySearch(low, high, x):` `    ``while` `(low <``=` `high):``        ``mid ``=` `int``((low ``+` `high) ``/``/` `2``);` `        ``if` `(f(mid) < x):``            ``low ``=` `mid ``+` `1``;``        ``elif` `(f(mid) > x):``            ``high ``=` `mid ``-` `1``;``        ``else``:``            ``return` `True``;``            ` `    ``return` `False``;` `# Returns true if x isStella octangula``#  number. Else returns false.``def` `isStellaOctangula(x):` `    ``if` `(x ``=``=` `0``):``        ``return` `True``;` `    ``# Find 'high' for binary search``    ``# by repeated doubling``    ``i ``=` `1``;``    ``while` `(f(i) < x):``        ``i ``=` `i ``*` `2``;` `    ``# If condition is satisfied for a``    ``# power of 2.``    ``if` `(f(i) ``=``=` `x):``        ``return` `True``;` `    ``# Call binary search``    ``return` `binarySearch(i ``/` `2``, i, x);` `# Driver code``n ``=` `51``;` `if` `(isStellaOctangula(n) ``=``=` `True``):``    ``print``(``"Yes"``);``else``:``    ``print``(``"No"``);` `# This code is contributed by Code_Mech`

## C#

 `// Program to check if``// a number is Stella``// Octangula Number``using` `System;` `class` `GFG``{` `// Returns value of``// n*(2*n*n - 1)``static` `int` `f(``int` `n)``{``    ``return` `n * (2 * n *``                ``n - 1);``}` `// Finds if a value of``// f(n) is equal to x``// where n is in``// interval [low..high]``static` `bool` `binarySearch(``int` `low,``                         ``int` `high,``                         ``int` `x)``{``    ``while` `(low <= high)``    ``{``        ``int` `mid = (low + high) / 2;` `        ``if` `(f(mid) < x)``            ``low = mid + 1;``        ``else` `if` `(f(mid) > x)``            ``high = mid - 1;``        ``else``            ``return` `true``;``    ``}``    ``return` `false``;``}` `// Returns true if x``// is Stella Octangula``// Number.Else returns``// false.``static` `bool` `isStellaOctangula(``int` `x)``{``    ``if` `(x == 0)``    ``return` `true``;` `    ``// Find 'high' for``    ``// binary search by``    ``// repeated doubling``    ``int` `i = 1;``    ``while` `(f(i) < x)``        ``i = i * 2;` `    ``// If condition is``    ``// satisfied for a``    ``// power of 2.``    ``if` `(f(i) == x)``        ``return` `true``;` `    ``// Call binary search``    ``return` `binarySearch(i / 2,``                        ``i, x);``}` `// Driver code``public` `static` `void` `Main ()``{``    ``int` `n = 51;``    ``if` `(isStellaOctangula(n))``        ``Console.WriteLine(``"Yes"``);``    ``else``        ``Console.WriteLine(``"No"``);``}``}` `// This code is contributed``// by anuj_67.`

## Javascript

 ``
Output:
`Yes`

My Personal Notes arrow_drop_up