Comprobar si un número dado es Pronic | Enfoque eficiente

Un número pronico es un número que se puede representar como el producto de dos enteros positivos consecutivos. Al multiplicar estos dos números enteros positivos consecutivos, se puede formar un rectángulo que se representa por el producto o número pronico. Por lo que también se le conoce como Número Rectangular .
Los primeros números Pronic son: 
0, 2, 6, 12, 20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462 . . . . . .
Número pronico es un número que es el producto de dos enteros consecutivos, es decir, un número n es un producto de x y (x+1). La tarea es verificar si un número dado es pronético o no.

Representación Matemática: 

If x is a pronic number, then x=n(n+1) ∀ n∈N0
Where, N0={0, 1, 2, 3, 4, ....}, (A set of Natural Numbers)

Ejemplos: 

Input : 56
Output : YES
Explanation: 56 = 7 * 8 i.e 56 is a product 
of two consecutive integers 7 and 8.

Input : 65
Output : NO
Explanation: 65 cannot be represented as a
product of any two consecutive integers.

Anteriormente habíamos discutido un enfoque para verificar si un número es pronético o no en este artículo usando un bucle. La complejidad temporal del algoritmo anterior es comparativamente muy alta y, en términos de notación asintótica Big-O, es O(√n). 
En este artículo, vamos a explicar un enfoque eficiente con una complejidad temporal de O(log(log n). La idea es observar que si un número se puede expresar como el producto de dos enteros consecutivos, entonces los dos enteros estarán cerca al cuadrado de la raíz de ese número. Una observación más adecuada conducirá al hecho de que un número N puede representarse como producto de dos enteros consecutivos solo si el producto de floor(sqrt(N)) y floor(sqrt(N) )+1 es igual a N.

A continuación se muestra el algoritmo paso a paso del enfoque anterior:  

Step 1: Evaluate the square root value of the given number.
Step 2: Calculate the floor value of that square root.
Step 3: Calculate the product of value calculated in step-2
    and its next consecutive number.
Step 4: Check the product value in step-3 with the given number.
    Step 4.1: If the condition satisfies,
          then the number is a pronic number.
    Step 4.2: Otherwise the number is not a pronic number.

A continuación se muestra la implementación del algoritmo anterior: 

C++

// C/C++ program to check if a number is pronic or not
 
#include<bits/stdc++.h>
using namespace std;
 
// function to check Pronic Number
bool pronic_check(int n)
{
    int x = (int)(sqrt(n));
 
    // Checking Pronic Number by
    // multiplying consecutive numbers
    if (x*(x+1)==n)
        return true;
    else
        return false;
}
 
// Driver Code
int main(void)
{
    int n = 56;   
    pronic_check(n) == true? cout << "YES" :
                             cout << "NO";
     
    return 0;
}

Java

// Java program to check if a number is pronic or not
 
import java.io.*;
import java.util.*;
import java.math.*;
 
class GFG
{
 
    // Function to check Pronic Number
    static boolean pronic_check(int n)
    {
        int x = (int)(Math.sqrt(n));
     
        // Checking Pronic Number by
        // multiplying consecutive numbers
        if (x * (x + 1) == n)
            return true;
        else
            return false;
    }
     
    // Driver Code
    public static void main(String[] args)
    {
        int n = 56;       
        if (pronic_check(n)==true)
            System.out.println("YES");
        else
            System.out.println("NO");
    }
}

Python3

# Python program to check if a number is pronic or not
 
import math
 
# function to check Pronic Number
def pronic_check(n) :
    x = (int)(math.sqrt(n))
 
    # Checking Pronic Number by multiplying
    # consecutive numbers
    if (x*(x + 1)== n):
        return True
    else:
        return False
 
# Driver Code
n = 56
 
if (pronic_check(n)==True):
    print("YES")
else:
    print("NO")

C#

// C# program to check if a number is
// pronic or not
using System;
 
class GFG
{
 
    // Function to check Pronic Number
    static bool pronic_check(int n)
    {
        int x = (int)(Math.Sqrt(n));
     
        // Checking Pronic Number by
        // multiplying consecutive numbers
        if (x * (x + 1) == n)
            return true;
        else
            return false;
    }
     
    // Driver Code
    public static void Main()
    {
        int n = 56;
         
        if (pronic_check(n)==true)
            Console.Write("YES");
        else
            Console.Write("NO");
    }
}
 
// This code is contributed by vt_m.

PHP

<?php
// PHP program to check if a
// number is pronic or not
 
// function to check Pronic Number
function pronic_check($n)
{
    $x = floor(sqrt($n));
 
    // Checking Pronic Number by
    // multiplying consecutive numbers
    if ($x * ($x + 1) == $n)
        return true;
    else
        return false;
}
 
    // Driver Code
    $n = 56;
    if (pronic_check($n) == true)
        echo "YES" ;
    else
        echo "NO";
         
// This code is contributed by Sam007
?>

Javascript

<script>
 
// Javascript program to check if a number is pronic or not
 
// function to check Pronic Number
function pronic_check(n)
{
    var x = parseInt(Math.sqrt(n));
 
    // Checking Pronic Number by
    // multiplying consecutive numbers
    if (x * (x + 1) == n)
        return true;
    else
        return false;
}
 
// Driver Code
var n = 56;    
pronic_check(n) == true? document.write("YES") :
document.write("NO");
 
// This code is contributed by noob2000.
</script>

Producción: 

YES

Publicación traducida automáticamente

Artículo escrito por SoumyadeepDebnath y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *