N-ésimo número no cuadrado

Dado n , encuentre el n-ésimo número que no es un cuadrado perfecto entre los números naturales (1, 2, 3, 4, 5, 6, …)

Ejemplos: 

Input : 3
Output : 5
First three non-square numbers are 2, 3
and 5

Input : 5
Output : 7

Input : 16
Output : 20

Mirando la declaración del problema, podemos llegar a un enfoque directo de fuerza bruta. Podemos partir de n = 1 y empezar a comprobar si cada uno de ellos es un cuadrado perfecto o no. Entonces podemos llegar al enésimo número no cuadrado. 
Sin embargo, el enfoque anterior es muy lento ya que busca cada uno en cada número más pequeño que el objetivo cada vez. 
Podemos observar que la serie considerada es 2, 3, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 17,…. 
Podemos llegar a la fórmula de tiempo constante para el número n en esta secuencia, por inspección. 
ans(n) = n + \left \lpiso \frac{1}{2} + \sqrt{n}\right \rpiso   .
La corrección de la fórmula puede probarse por el Principio de Inducción Matemática.

A continuación se muestra la implementación de la fórmula anterior. 

C++

// CPP program to find n-th non-square number.
#include <bits/stdc++.h>
 
using namespace std;
 
// function to find the nth Non-Square Number
int findNthNonSquare(int n)
{
    // conversion from int to long double is
    // necessary in order to preserve decimal
    // places after square root.
    long double x = (long double)n;
 
    // calculating the result
    long double ans = x + floor(0.5 + sqrt(x));
 
    return (int)ans;
}
 
// Driver code
int main()
{
    // initializing the term number
    int n = 16;
 
    // Print the result
    cout << "The " << n << "th Non-Square number is ";
    cout << findNthNonSquare(n);
 
    return 0;
}

Java

// Java program to find
// n-th non-square number.
import java.io.*;
import java.util.*;
import java.lang.*;
 
class GFG
{
     
// function to find the
// nth Non-Square Number
static int findNthNonSquare(int n)
{
    // conversion from int to
    // long double is necessary
    // in order to preserve decimal
    // places after square root.
    double x = (double)n;
 
    // calculating the result
    double ans = x + Math.floor(0.5 +
                     Math.sqrt(x));
 
    return (int)ans;
}
 
// Driver code
public static void main(String[] args)
{
    // initializing
    // the term number
    int n = 16;
 
    // Print the result
    System.out.print("The " + n +
                     "th Non-Square number is ");
    System.out.print(findNthNonSquare(n));
}
}

Python3

# Python3 program to find n-th
# non-square number.
import math
 
# function to find the nth
# Non-Square Number
def findNthNonSquare(n):
 
    # conversion from int to long
    # double is necessary in order
    # to preserve decimal places
    # after square root.
    x = n;
 
    # calculating the result
    ans = x + math.floor(0.5 + math.sqrt(x));
 
    return int(ans);
 
# Driver code
 
# initializing the term number
n = 16;
 
# Print the result
print("The", n, "th Non-Square number is",
                     findNthNonSquare(n));
 
# This code is contributed by mits

C#

// C# program to find
// n-th non-square number.
using System;
 
class GFG
{
     
// function to find the
// nth Non-Square Number
static int findNthNonSquare(int n)
{
    // conversion from int
    // to long double is
    // necessary in order
    // to preserve decimal
    // places after square
    // root.
    double x = (double)n;
 
    // calculating the result
    double ans = x + Math.Floor(0.5 +
                     Math.Sqrt(x));
 
    return (int)ans;
}
 
// Driver code
public static void Main()
{
    // initializing
    // the term number
    int n = 16;
 
    // Print the result
    Console.Write("The " + n +
                  "th Non-Square " +
                      "number is ");
    Console.Write(findNthNonSquare(n));
}
}
 
// This code is contributed
// by anuj_67.

PHP

<?php
// PHP program to find n-th
// non-square number.
 
// function to find the nth
// Non-Square Number
function findNthNonSquare($n)
{
    // conversion from int to long
    // double is necessary in order
    // to preserve decimal places
    // after square root.
    $x = $n;
 
    // calculating the result
    $ans = $x + floor(0.5 + sqrt($x));
 
    return (int)$ans;
}
 
// Driver code
 
// initializing the term number
$n = 16;
 
// Print the result
echo "The " . $n .
     "th Non-Square number is ";
echo findNthNonSquare($n);
 
// This Code is Contributed by mits
?>

Javascript

<script>
 
// Javascript program to find
// n-th non-square number.
 
// Function to find the
// nth Non-Square Number
function findNthNonSquare(n)
{
     
    // Conversion from var to
    // var var is necessary
    // in order to preserve decimal
    // places after square root.
    var x =  n;
 
    // Calculating the result
    var ans = x + Math.floor(0.5 + Math.sqrt(x));
 
    return parseInt(ans);
}
 
// Driver code
 
// Initializing
// the term number
var n = 16;
 
// Print the result
document.write("The " + n + "th Non-Square number is ");
document.write(findNthNonSquare(n));
 
// This code is contributed by todaysgaurav
 
</script>

Producción: 

The 16th Non-Square number is 20

Complejidad del tiempo \mathcal{O}(1)
Complejidad espacial \mathcal{O}(1)
 

Publicación traducida automáticamente

Artículo escrito por AayushChaturvedi 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 *