lunes, 9 de noviembre de 2026

Regreso 17 – Cuestiones sobre los k-casi primos

En el año 2009 presenté los números k-casi primos, que son aquellos que poseen k divisores primos, no necesariamente distintos, así, 48=24*3 es 5-casi primo, y 30=2*3*5, 3-casi primo.

https://hojaynumeros.blogspot.com/2009/12/primos-semiprimos-y-casi-primos-1.html

Casos particulares son los primos, para k=1, los semiprimos, con k=2 y un caso particular para k=3 son los esfénicos, que poseen tres factores primos distintos, como el 42=2*3*7

Es un concepto elemental, por lo que su presencia en Internet no es muy extensa. Una excepción interesante es la página https://mathworld.wolfram.com/AlmostPrime.html

En ella se reproducen fórmulas teóricas que cuentan el número de k-casi primos menores o iguales a un número dado N. Comenzaré con esa cuestión, pero desarrollándola con herramientas informáticas.

Distribución de los k-casi primos

Para identificar los números de este tipo podemos usar la función BIGOMEGA, que cuenta todos los factores primos con repetición. Algunos lenguajes de programación la tienen incorporada, como PARI. En él basta igualar esa función al valor de k:

escasiprimo(n,k)=bigomega(n)==k

Con eso basta.

Con este código encontramos todos los 5-casi primos del 1 al 500:

? escasiprimo(n,k)=bigomega(n)==k
for(a=1,500,if(escasiprimo(a,5), print1(a,", ")))

%3 = (n,k)->bigomega(n)==k

32, 48, 72, 80, 108, 112, 120, 162, 168, 176, 180, 200, 208, 243, 252, 264, 270, 272, 280, 300, 304, 312, 368, 378, 392, 396, 405, 408, 420, 440, 450, 456, 464, 468, 496, 500, …

Están publicados en https://oeis.org/A014614, y su tratamiento es elemental.

Para hojas de cálculo vale esta versión de la función BIGOMEGA:

Function bigomega(n)

Dim f, a, b

Dim vale As Boolean

  

a = n

f = 2: b = 0

While f * f <= a ‘f Es un posible factor primo

vale = False

While a / f = Int(a / f)’ ¿Es divisor?

b = b + 1’ Se cuentan repeticiones

a = a / f

vale = True

Wend

If f = 2 Then f = 3 Else f = f + 2 ‘Siguiente factor

Wend

If a > 1 Then b = b + 1’último factor

bigomega = b

End Function

Con esta función podemos construir ESCASIPRIMO(N,K):

Function escasiprimo(n, k) As Boolean

Dim a

a = bigomega(n)

If a = k Then escasiprimo = True Else escasiprimo = False

End Function

 
De esta forma, basta esta condición para encontrar k-casiprimos. En la imagen podemos observar las primeras soluciones para 5-casiprimos, ya estudiadas en PARI:




 
Cuestión 1: Estadísticas

¿Cuántos casi primos de cada clase son menores o iguales a un número n?

Para encontrar las frecuencias, bastará dimensionar un vector para ellas, por ejemplo, del 1 al 10, y dejar el 11 para “otros mayores de 10”

No es difícil la operación. La siguiente función las calcula y devuelve una lista con comas, para que se pueda convertir el texto en columnas.

Function estad_casi$(n)

Dim v(11)

Dim a, i, j

Dim s$

s$ = ""‘Contenedor de la lista de frecuencias

For i = 1 To 11: v(i) = 0: Next I ‘Frecuencias a cero

For j = 2 To n

a = bigomega(j) ‘Encuentra el tipo de casiprimo

If a > 10 And a > 0 Then v(11) = v(11) + 1 Else v(a) = v(a) + 1

‘Se cargan las frecuencias en el vector

Next j

For i = 1 To 11

s = s + ajusta(v(i)) ‘Se elabora la lista

If i < 11 Then s = s + ","

Next i

estad_casi = s

End Function

 

Por ejemplo, la estadística para n=5000 es la siguiente:

 

669,1365,1273,832,452,224,104,47,22,7,4

 

Si usamos la prestación de “Texto a columnas” podemos construir tablas de frecuencias y gráficos en hoja de cálculo:




Los resultados son lógicos. El máximo se presenta en los semiprimos. Los cuatro que poseen bigomega mayor que 10 son:


Sería interesante un ajuste a algún tipo de distribución, como la del modelo logístico de las epidemias. Ahí dejo el reto.

Cuestión 2: Descomposición de 2k-casiprimos en dos k-casiprimos

Un ejercicio sencillo es el de obtener la descomposición de un 2k-casiprimo en dos k-casiprimos. Nos permitirá desarrollar algunas técnicas.

Con una función

900=22*32*52 se puede descomponer en los 3-casiprimos 12=2*2*3 y 75=3*5*5. ¿En cuantos productos más? Con esta función se pueden encontrar todos. Como es tan solo una demostración, no se ha previsto que n no sea 2k-casiprimo, y se ha adaptado al ejemplo, suponiendo k=3. Para otro ejemplo, basta corregir.

Function dosfact$(n)

s = ""

For i = 2 To Sqr(n)

If n / i = n \ i Then’ Es divisor

If bigomega(i) = 3 Then’ Es 3-casiprimo

j = n / i: s = s + ajusta(i) + "×" + ajusta(j) + "  "

End If

End If

Next i

dosfact = s

End Function

 

Nos resultan cuatro descomposiciones:


12×75, 18×50, 20×45, 30×30 

Con Cartesius

Con esta herramienta también se puede intentar

(https://www.hojamat.es/sindecimales/combinatoria/herramientas/herrcomb.htm#cartesius)

Usamos las condiciones:

xtotal=3

xt=2,3,5

contar(2)<3

contar(3)<3

contar(5)<3

creciente


Piden combinar los tres números primos de 900 de forma que ninguno se repita más de dos veces. Así resultarán 3-casiprimos divisores de 90.

 

Sus desarrollos en factores resultan ser:


 

Y sus productos:


Obtenemos los mismos factores casiprimos. Al emparejarlos resultan los cuatro productos.

Razonamos

No son necesarias las herramientas informáticas en este caso. Si cada factor ha de poseer tres factores primos, sólo uno de ellos se podrá repetir, porque 900 no posee factores elevados a un exponente mayor que 2, luego tenemos: un factor sin repetición, 2*3*5 y seis factores con un elemento repetido. Como hay tres factores distintos en 900, y solo uno se repite, ese dará lugar a dos casos, y seis en total. Sumamos y nos resultarán siete factores posibles.

El principio de inclusión y exclusión nos ayuda a generalizar a más factores:

Card(AÈBÈC) =Card(A) + Card(B) + Card(C) - Card(AÇB) - Card(AÇC) - Card(BÇC) +  Card(AÇBÇC)

En este caso, podemos encontrar el número máximo combinaciones con repetición de los factores de 900 y restarle los arreglos no permitidos porque supongan repeticiones de tres o cuatro veces:

Sería:

Se deja así para quienes quieran seguir razonando.

Para casos más complejos podemos acudir a unas entradas recientes de este blog, que tratan el tema de los submulticonjuntos.

Cuestión 3: Además de casiprimos, ¿de qué otro tipo son?

Triangulares

Si pensamos en k-casiprimos triangulares, la primera idea es acudir a los semiprimos. Si N=n(n+1)/2 por ser triangular, uno de los factores de N deberá ser par, sea por ejemplo, n, y en ese caso n/2 y n+1 deberán ser primos. Si el factor par es n+1, lo serán (n+1)/2 y n. En ambos casos, el semiprimo deberá ser producto de un primo p en el que p+1 o p-1 sea doble de un primo. Los primeros ejemplos son: 6=3*4/2=3*2, 10=4*5/2=2*5, 15=5*6/2=5*3, …Todos ellos son triangulares y también semiprimos.

Con estas líneas los identificamos en PARI

a(n)=bigomega(n)==3&&omega==3&&(8*n+1)
for(k=4,5000,if(a(k)>0,print1(k,", ")))

La expresión 8*n+1 viene de que es cuadrada en los triangulares.

6, 10, 15, 21, 55, 91, 253, 703, 1081, 1711, 1891, 2701, 3403, …

Están publicados en https://oeis.org/A068443

Para los demás k-casiprimos, basta igualar bigomega a k en el anterior código PARI. Por ejemplo, los primeros triangulares 5-casiprimos son:

120, 300, 378, 496, 630, 780, 990, 1128, 1485, 1540, 1596, 2556, 2628, 2850, 3160, 3321, 3570, 3828, 4095, 4851, …

Están publicados muchos casos.

Oblongos

Los oblongos poseen la fórmula N=k(k+1), luego salvo 6=2*3, no podrán ser semiprimos. Los primeros 3-casiprimos lo serán si son doble de los triangulares semiprimos estudiados en el apartado anterior:

12, 20, 30, 42, 110, 182, 506, 1406, 2162, 3422, 3782, …

Han de tener un factor primo igual a 2, y de ahí que resulten muchos dobles de los anteriores. Pueden ser múltiplos de 4,  y así obtenemos el 12 y el 20 de nuevo. No hay más posibilidades.

Si buscamos ejemplos con k mayor que 3, se multiplican las soluciones, como 56=7*8 con k=4, 72=8*9 con k=5, y así con valores mayores. Su abundancia les quita interés.

Cuadrados o cubos

Dependerá del valor de k. Es fácil razonar que si es múltiplo de 2, podrán aparecer cuadrados, como 4=2*2, semiprimo, 36=2*2*3*3, con k=4, y cubos, con k múltiplo de 3. No tienen más misterio.

Números de Fibonacci

En este blog se ha usado la función esfibo:

Function esfibo(n) As Boolean 'devuelve verdadero si N es de Fibonacci
Dim f As Boolean
Dim a

f = False
a = 5 * n * n + 4
If escuad(a) Then f = True
a = 5 * n * n - 4
If  f = True
esfibo = f
End Function

Con ella y bigomega se pueden encontrar. Si los traducimos a PARI se obtienen los primeros:

Para semiprimos usamos

a(n)=bigomega(n)==3&&(issquare(5*n*n+4) || issquare(5*n*n-4))
for(k=4,5000,if(a(k)>0,print1(k,", ")))

Resultan estos primeros ejemplos:

21, 34, 55, 377, 4181, 17711, 121393, …

Están publicados en https://oeis.org/A053409

Con k=3 sólo han sido publicados los casos de esfénicos, más general es

8, 610, 987, 10946, 75025, …

Es un camino a seguir para buscar más casos.