Dado un número n, comprobar si es el número de Stella Octangula o no. Un número de la forma donde n es un número entero (0, 1, 2, 3, 4, …) se llama Stella Octangula. Los primeros números de Stella Octangula son 0, 1, 14, 51, 124, 245, 426, 679, 1016, 1449, 1990, …
Los números de Stella octangula que son cuadrados perfectos son 1 y 9653449 .
Dado un número x, comprueba si es Stella octangula.
Ejemplos:
Input: x = 51 Output: Yes For n = 3, the value of expression n(2n2 - 1) is 51 Input: n = 53 Output: No
Una solución simple es ejecutar un bucle a partir de n = 0. Para cada n, compruebe si n(2n 2 – 1) es igual a x. Ejecutamos el bucle mientras el valor de n(2n 2 – 1) es menor o igual que x.
Una solución eficiente es utilizar la búsqueda binaria ilimitada . Primero encontramos un valor de n tal que n(2n 2 – 1) es mayor que x usando duplicaciones repetidas. Luego aplicamos la búsqueda binaria .
C++
// Program to check if a number is Stella // Octangula Number #include <bits/stdc++.h> 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
<script> // JavaScript program to check if // a number is Stella // Octangula Number // Returns value of // n*(2*n*n - 1) function 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] function binarySearch(low, high, x) { while (low <= high) { let 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. function isStellaOctangula(x) { if (x == 0) return true; // Find 'high' for // binary search by // repeated doubling let 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 let n = 51; if (isStellaOctangula(n)) document.write("Yes"); else document.write("No"); // This code is contributed by souravghosh0416. </script>
Yes
Publicación traducida automáticamente
Artículo escrito por jaideeppyne1997 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA