es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encontrar el número pentagonal más cercano, 𝑝𝑛, dado un número entero positivo, S donde S ≥ 1

Necesito crear una función en R que tome como entrada un número entero, S ≥ 1 y devuelva como resultado el número pentagonal más cercano a S. El resultado de mi función debe ser el número pentagonal 𝑝𝑛 que cumpla con |𝑝𝑛−𝑠|≤|𝑝𝑚−𝑠| para todos los números enteros positivos m.

Sin embargo, si pudiera obtener dos números pentagonales diferentes, lo que sucede cuando el entero s está literalmente en medio de ellos, entonces no importa cuál tome (valor mayor o menor), como cuando S es 17 y el número pentagonal más cercano a 17 es 12 y 22, por lo que puede tomar cualquiera de ellos.

Aquí está el código que he creado para encontrar el número pentagonal 𝑝𝑛 para un número entero positivo, n:

P_n=function(n){
x=(3*n^2-n)/2
if(n == 0){
return (0)
}else{
return(x)
}
}

Después de escribir el código para encontrar pn, ahora estoy atascado en encontrar el número pentagonal más cercano para el entero s. Sé que la idea principal es distinguir Pm y Pn usando la función ceiling y floor pero realmente no sé cómo vincularlo con la ecuación |𝑝𝑛−𝑠|≤|𝑝𝑚−𝑠|.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para encontrar el número pentagonal más cercano al número entero de entrada, podemos usar un bucle while para iterar a través de diferentes números pentagonales comenzando desde n=1 hasta que encontremos el más cercano.

    Aquí está el código para implementar esto:

    Para explicar el código, comenzamos definiendo una función closest_pentagonal que toma un número entero de entrada S. Inicializamos las variables n=1, min_diff=∞ (inicialmente establecido en un número muy grande) y closest=0. El bucle while continuará hasta que encontremos el número pentagonal más cercano.

    Dentro del bucle, calculamos los números pentagonales pent_n y pent_nplus1 utilizando la ecuación que proporcionaste. Luego calculamos la diferencia absoluta entre pent_n y S en diff_n y entre pent_nplus1 y S en diff_nplus1.

    Luego verificamos si encontramos el número más cercano y salimos del bucle si lo hicimos. De lo contrario, actualizamos min_diff y closest en consecuencia en función de qué número pentagonal tiene una diferencia más pequeña con S.

    Finalmente, incrementamos n y continuamos con el bucle while hasta que encontremos el número pentagonal más cercano.

    Tenga en cuenta que si S está exactamente a medio camino entre dos números pentagonales consecutivos, la función simplemente devolverá el primero que encuentre, que podría ser el valor mayor o menor, como se mencionó en su pregunta.

Comments are closed.