Autor Tema: ¿Cuales son las series cuyos números cumplen más condiciones más rápido?

0 Usuarios y 1 Visitante están viendo este tema.

22 Julio, 2024, 12:58 pm
Leído 669 veces

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Supongamos que tenemos la serie A:
0, 98765, 123

Y la serie B:
1, 99999, 360

La serie B tiene un capicúa en 2ndo lugar, la A no tiene, por lo tanto la condición de tener un capicúa la cumple B más rápido.

Eso es un ejemplo, no demuestra que B sea mejor. Quiero hacer un programa que genere alguna de las series más acordes a esto pero no he concluído cómo son especificamente. En principio no pretendo que tenga decimales ni negativos ni que sea infinita. Se establece un número mínimo y otro máximo. En general, es conveniente que al inicio tengan el mínimo y máximo o 2 números parecidos a ellos. En cuanto a lo demás es que no concluyo. He estado pensando en que tengan caracteres lo más distintos posible, pero eso hace que los capicúa estén al final. Además hay varias cosas que pueden tenerse en cuenta, no sé si todas importan:
- Ser divisible entre más números, el siguiente debe ser preferentemente divisible entre otros.
- Diferencia entre sus contiguos (por ejemplo en 989 las diferencias son 9-8=1 y 8-9=-1, entonces el siguiente debe tener preferentemente diferencias lo más distintas a esas).
- Repeticiones de caracteres (por ejemplo si un número es 98765, preferentemente el siguiente debe tener todos los caracteres iguales).
- Cuan capicúa es (lo normal es considerarlo capicúa o no, pero no es lo mismo tener 2/2 caracteres capicúa que 9/9, y además la condición puede ser "ser 50% capicúa" por ejemplo).

Es claro que algunas cosas contradicen otras, deben establecerse prioridades o asignar puntajes a los números según cuantas condiciones cumplan, no sé.

¿Cómo debería ser la serie y/o el programa?

Entiendo que debe empezar por algo como:
- Definir el mínimo (no es que sea el 1ero de la serie).
- Definir el máximo (idem).
- Hallar, en ese rango, el número más divisible. Por ejemplo de 1 a 15 sería el 12. Supongo que este conviene que sea el 1er número. Generalmente será más cercano al máximo que al mínimo.
- El 2ndo número, bien podría ser el mínimo, si sólo tiene 1 caracter, sino uno cercano a él pero habría que considerar las otras cosas.

También hay que considerar condiciones como "dar resto 1 al ser dividido entre...", lo normal es buscar que den resto 0 pero esto puede ser también.

22 Julio, 2024, 01:36 pm
Respuesta #1

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 12,032
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
 Hola Tachikomaia.


Hola.

Creo que con números más divisibles te refieres a números que tienen más cantidad de divisores.

Esto va a depender de la cantidad de primos (repetidos o no repetidos) en que se puedan descomponer los números.

Da igual qué primos sean, lo importante es cuántos haya.

Por ejemplo \( 12=2*2*3 \), \( 15=3*5 \); el quince tiene primos más grandes por así decir, pero tiene menos divisores que 12 porque sólo es producto de dos primos (ya digo que no importan si son repetidos ni el valor de los primos, si no laa combinaciones que podemos formar con los que tengamos).

Hay una fórmula para hallar la cantidad de divisores:

Primero tenemos que expresar el producto de primos con potencias; por ejemplo:

Si tienes

\( 12=2*2*3 \)

hay que escribrlo así

\( 12=2^{{\color{blue}2}}*3^{{\color{blue}1}} \)

La suma de las potencias 2+1 nos dice cuántos primos tiene el producto, como puedes ver. Son tres.

Y la fórmula que nos va a dar la cantidad de divisores es

\( ({\color{blue}2}+1)*({\color{blue}1}+1)=6 \).

(Tiene seis porque se cuenta siempre el 1 en todos los casos; el 1 divide a todos los números).

O sea, tomas las potencias de los primos y las metes dentro de un paréntesis sumándoles 1; y multiplicas todos los paréntesis.

Otro ejemplo:

\( 1656=2^{{\color{blue}3}}*3^{2}*23^{1} \)

Los la cantidad de divisores será

\( (3+1)*(2+1)*(1+1)=24 \).

Para programarlo tendrás que hacer una rutina que descomponga los números en primos; como es para Flash, supongo, quizá encuentre un código en internet.

Saludos.

07 Agosto, 2024, 08:52 pm
Respuesta #2

Tachikomaia

  • $$\Large \color{#5b61b3}\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 1,297
  • País: uy
  • Karma: +0/-0
  • Sexo: Masculino
Me cuesta entenderte y mi PC estuvo rota, por eso recién te respondo.

Mi 1era duda es cómo averiguas los primos de un número, pues dices:
12=2∗2∗3
en lo que pareces haber usado los primos más pequeños, pero si el número fuese grande puede ser complicado saber cuales son sus primos más pequeños, además de que puede haber más de un grupo ¿no? Por ejemplo el 42 es 6*7 o 2*21, m... supongo que puedes hacer 2*3*7, y está bien, m... ¿pero siempre es posible?

El resto ya lo entendí, bien.

07 Agosto, 2024, 09:26 pm
Respuesta #3

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 12,032
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Me cuesta entenderte y mi PC estuvo rota, por eso recién te respondo.

Mi 1era duda es cómo averiguas los primos de un número, pues dices:
12=2∗2∗3
en lo que pareces haber usado los primos más pequeños, pero si el número fuese grande puede ser complicado saber cuales son sus primos más pequeños, además de que puede haber más de un grupo ¿no? Por ejemplo el 42 es 6*7 o 2*21, m... supongo que puedes hacer 2*3*7, y está bien, m... ¿pero siempre es posible?

El resto ya lo entendí, bien.

Si los números no son demasiado gigantescos siempre es posible factorizarlos en primos con el ordenador. Todo número natural es producto de primos, menos el 1.

No se usan sólo los primos más pequeños, se usan todos; por ejemplo:

\( 21164=37*13*11*2^{2} \)

Pero tienes que hacerte una rutina que factorice los números en primos o buscarla por ahí; te la he buscado para Flash, pero no veo nada.

Saludos.

07 Agosto, 2024, 09:48 pm
Respuesta #4

feriva

  • $$\Large \color{#a53f54}\pi\,\pi\,\pi\,\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 12,032
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
Le he dicho al GPT que lo haga en actionscript 2:

Código: [Seleccionar]
// Función para verificar si un número es primo
function esPrimo(num:Number):Boolean {
    if (num <= 1) return false;
    for (var i:Number = 2; i <= Math.sqrt(num); i++) {
        if (num % i == 0) return false;
    }
    return true;
}

// Función para factorizar un número en sus factores primos
function factorizarEnPrimos(num:Number):Array {
    var factores:Array = [];
    var divisor:Number = 2;
    while (num > 1) {
        if (num % divisor == 0 && esPrimo(divisor)) {
            factores.push(divisor);
            num /= divisor;
        } else {
            divisor++;
        }
    }
    return factores;
}

// Ejemplo de uso
var numero:Number = 60;
var factoresPrimos:Array = factorizarEnPrimos(numero);
trace("Factores primos de " + numero + ": " + factoresPrimos.join(", "));

Explicación del código:
Función esPrimo:

Esta función verifica si un número es primo.
Si el número es menor o igual a 1, no es primo.
Itera desde 2 hasta la raíz cuadrada del número para verificar si tiene divisores. Si encuentra alguno, no es primo.
Función factorizarEnPrimos:

Esta función realiza la factorización del número en sus factores primos.
Usa un bucle while para dividir el número por el divisor más pequeño posible (iniciando en 2) mientras el número sea mayor que 1.
Si el divisor actual divide al número y es primo, lo añade a la lista de factores y divide el número por ese divisor.
Si no, incrementa el divisor y repite el proceso.
Ejemplo de uso:

Se define un número (en este caso, 60).
Se llama a la función factorizarEnPrimos con ese número.
Se muestran los factores primos resultantes.


Saludos.