Mostrando entradas con la etiqueta Funciones generatrices. Mostrar todas las entradas
Mostrando entradas con la etiqueta Funciones generatrices. Mostrar todas las entradas

lunes, 13 de mayo de 2013

Particiones con sumandos restringidos



En la anterior entrada hemos supuesto que el número de sumandos en una partición era libre, hasta el mayor posible. Puede ocurrir, sin embargo, que sólo deseemos usar un máximo de hasta tres sumandos, o exactamente cuatro o cualquier otra posibilidad. Por otra parte, los sumandos pueden estar restringidos en magnitud dentro de un rango. Esto complica un poco las cuestiones.

Veremos con algunos ejemplos la utilidad de las funciones generatrices y la posibilidad de comprobar resultados con la hoja Cartesius.

¿De cuántas formas se puede descomponer el número 8 en sumandos no mayores que 4? 

Si has entendido de qué van las funciones generatrices comprobarás que la siguiente es la adecuada para este caso



Como en casos anteriores podemos expresarlo como sumas de sucesiones geométricas


Y en general


Para aplicarlo al caso de 8 bastará buscar su coeficiente en la F.G. aplicada al caso en el que k=4. Lo escribimos en PARI

print(taylor(1/(1-x)/(1-x^2)/(1-x^3)/(1-x^4),x,9))

Y obtenemos

F.G.=1+x+2x^2+3*x^3+5*x^4+6*x^5+9*x^6+11*x^7+15*x^8+O(x^9)

Luego la solución del problema es P(8/sumandos no mayores que 4)=15

Si lo planteamos con Cartesius obtenemos los 15





Particiones conjugadas

Ahora usaremos una técnica muy simple, pero que da buenos resultados. Como veíamos en otra entrada (http://hojaynumeros.blogspot.com.es/2011/02/particiones-de-un-numero.html) cada una de las particiones se puede representar mediante un diagrama de Ferrer, en el que se adosan tantas filas como sumandos entran en la partición, siendo la longitud de cada columna el valor del sumando. Así, la partición 8=4+2+1+1 se puede representar como




Cada fila representa un sumando: 4, 2, 1 y 1. Todos los diagramas que formemos con estas 15 particiones tendrán como máxima anchura cuatro cuadrados.

Lo bueno de estos diagramas, entre otras ventajas, es que si los giramos convirtiendo las filas en columnas y las columnas por filas seguirán siendo particiones, llamadas particiones conjugadas.
Así, la partición 3+2+1+1+1


Se puede convertir en 5+2+1


Esta correspondencia es biyectiva. Si en las 15 particiones consideradas ninguna podía sobrepasar la anchura de 4, sus conjugadas no podrán tener más de cuatro filas, es decir, más de cuatro sumandos.

Esto es muy interesante: Las particiones en sumandos no mayores que k coinciden en número con las particiones en no más de k sumandos.

En nuestro ejemplo: si existen 15 particiones de 8 en sumandos no mayores que 4, también serán 15 las que se obtengan con no más de cuatro sumandos libres.

Lo comprobamos, intercambiando en Cartesius el 4 con el 8, y vemos que resultan también 15:





Así que si alguna vez no puedes construir la F.G. de un tipo de particiones, puedes acudir a las conjugadas por si resulta más sencillo. El siguiente ejemplo lo aclara.

¿De cuántas formas distintas podemos descomponer el número 12 en exactamente cuatro sumandos?

Acudimos a la conjugada: Este problema es el mismo que descomponer 12 en sumas de las cuales el mayor sumando sea 4. De otra forma: debe figurar al menos un 4 y el resto ser 1,2 o 3.

De esa forma la F.G. es fácil de obtener:





(hemos suprimido el 1 en el mayor sumando)

Generalizando


Efectuamos las comprobaciones en nuestro ejemplo

Con la función generatriz y PARI

print(taylor(x^4/(1-x)/(1-x^2)/(1-x^3)/(1-x^4),x,9))

Desarrollo: x^4+x^5+2*x^6+3*x^7+5*x^8+6*x^9+9*x^10+11*x^11+15*x^12+O(x^13)

Solución: el coeficiente de 12, que es 15.

Con Cartesius

Tenemos que eliminar el cero de los sumandos, para que sean exactamente cuatro. Por eso el rango será 1..12



Resultado: 15



Problema conjugado

Ahora, en lugar de cuatro sumandos, el máximo ha de ser siempre 4, pero eso no es operativo, pues podemos eliminar siempre ese 4 y en lugar de formar una suma 12 pedimos que la suma sea 8. Este problema lo tenemos resuelto más arriba y nos resultó 15, como era de esperar.


lunes, 6 de mayo de 2013

Particiones y funciones generatrices


Unimos hoy dos conceptos que ya hemos tratado en el blog

http://hojaynumeros.blogspot.com.es/2011/01/montones-de-piezas.html y siguientes
http://hojaynumeros.blogspot.com.es/2013/03/funciones-generatrices-en-combinatoria.html y siguiente.

y que al unirse dan resultados mucho más potentes. Recomendamos la lectura previa de ambas. Recorreremos ahora los principales tipos de particiones, ayudados también por nuestra hoja de cálculo Cartesius.

Particiones ordinarias P(n)

En la entrada ya referida las estudiamos desde un punto de vista general. Aplicaremos ahora el concepto de función generatriz.

Supongamos que deseamos encontrar todas las particiones ordinarias del número 6 (formas de representar 6 como suma con posible repetición de sumandos). Para ello no necesitamos ni funciones ni técnicas informáticas. Con un poco de atención llegaremos a que el 6 se descompone en suma de las siguientes formas:

6 = 5+1 = 4+2 = 4+1+1 = 3+3 = 3+2+1 = 3+1+1+1 = 2+2+2 = 2+2+1+1 = 2+1+1+1+1 = 1+1+1+1+1+1

Son once en total

Si queremos expresar este proceso mediante funciones generatrices hay que recordar que los sumandos provenían de exponentes en un polinomio. En efecto, en este caso del 6 podemos considerar la función



Si multiplicamos todo, el término de grado 6 se compondrá de todos los productos en los que el primer paréntesis aporta los sumandos iguales a 1, el segundo los que valen 2, el tercero, 3, y así hasta llegar al 6. Hemos tomado infinitas potencias en cada uno porque las mayores que 6 no van a influir, pero gracias a ello la expresión se simplifica como una progresión geométrica:

O expresado de forma sintética y generalizando hasta n:


Después volveremos a esta función generatriz para adaptarla a casos particulares. La comprobamos para n=6. Vimos en anteriores entradas que con PARI se pueden desarrollar fácilmente.

print(taylor(1/(1-x)/(1-x^2)/(1-x^3)/(1-x^4)/(1-x^5)/(1-x^6),x,7))

Resultado: 1+x+2x^2+3x^3+5x^4+7x^5+11x^6+O(x^7) con el coeficiente 11 para x^6, como era de esperar. Serían las once particiones esperadas. Como en ocasiones anteriores, este método nos da más, pues podemos leer otros coeficientes: con el 5 tendríamos 7 particiones, con el 4, 5, y así…A la inversa, si en lugar de pararnos en el 6 hubiéramos seguido escribiendo factores, obtendríamos más particiones, para 7, 8,… Así que recordemos la función generatriz (F.G.) para las particiones ordinarias del número n:



Podemos comprobar el resultado con nuestra hoja Cartesius. Basta programar esto:


Concreta un total de 6 conjuntos, formado cada uno por el rango 0..6, en el que sólo se seleccionan los arreglos crecientes (para evitar duplicidades) y con suma 6.
Obtendríamos once resultados



Intenta obtener otros resultados similares. Lo importante es que recuerdes la definición de partición de un número y su F.G.

Particiones en sumandos distintos Q(N)

Si al descomponer un número en sumandos no permitimos que figuren repetidos, obtendríamos resultados muy distintos, recogidos como la función de partición Q(n).

En este caso la función generatriz se simplifica mucho, pues en los paréntesis no han de figurar todas las potencias sino una sola por cada sumando. Así, para n=7 la F.G. sería



y generalizando para n


Para el caso de 7 podemos expandir la F.G. mediante wxMaxima



Obtendremos un desarrollo en forma de polinomio, pero sólo serán útiles los coeficientes menores o iguales a 7:


Ya tenemos la solución, el 7 se puede descomponer en 5 formas diferentes como suma de números naturales distintos:

7=6+1=5+2=4+3=4+2+1

Además, hemos obtenido que el 6 tiene 4 descomposiciones, el 5, 3 y así hasta el 1. Recuerda: estos son los únicos fiables en el desarrollo.

Con Cartesius:



5 soluciones



Particiones en partes impares P(N/Impar)

Aquí vemos rápidamente la utilidad de la función generatriz. Si en la fórmula general de las particiones eliminamos los pares de los paréntesis quedaría




que fácilmente se traduce, al igual que en las particiones ordinarias, a cocientes:


O bien


Por ejemplo, para n=7, usando PARI, nos resultaría

print(taylor(1/(1-x)/(1-x^3)/(1-x^5)/(1-x^7),x,8))

1+x+x^2+2*x^3+2*x^4+3*x^5+4*x^6+5*x^7+O(x^8)

Como el coeficiente de 7 es 5, ese será el número de particiones en impares. Como son tan pocas, las podemos escribir directamente: 7 = 5+1+1 = 3+3+1 = 3+1+1+1+1 = 1+1+1+1+1+1+1
Intenta comprobar, como en los casos anteriores, que con 6 resultarían 4, con 5, 3, y así con todos los coeficientes resultantes.

Comprobación con Cartesius














La instrucción CONCERO significa que a los impares les adjuntamos el cero para representar los sumandos que no entran en una suma determinada. Además, se impone la condición de ser impares.
5 soluciones:



Este resultado coincide con el de representar 7 con sumandos distintos. En realidad siempre es así, como demostró Euler usando funciones generatrices:

El número de particiones de un número en sumandos distintos coincide con el de particiones en sumandos impares

Con el uso de las F.G. todo se reduce a un artificio algebraico:

Demostración

Todo se basa en que

Así que partiendo de la F.G. de la partición en elementos distintos, representamos cada factor de esta forma, se simplificarán los factores de exponente par y sólo quedarán los impares en el denominador







En el caso de n=7 te proponemos una correspondencia biyectiva por el método de Sylvester. Para que pienses un poco más sólo daremos el proceso y tú sacas tus consecuencias:

7=6+1=5+2=4+3=4+2+1 = 2*3+1 = 5+2*1=4*1+3=4*1+2*1+1 y ahora sustituimos cada producto por la suma correspondiente: 7 = 3+3+1 = 5+1+1 = 1+1+1+1+3 = 1+1+1+1+1+1+1

¿Puedes generalizarlo?

Para el camino inverso deberíamos expresar cada suma de repetidos como suma respecto a potencias de 2 distintas que se sacan como factor común.

7 = 3+3+1 = 5+1+1 = 1+1+1+1+3 = 1+1+1+1+1+1+1 = 3*2+1=5+2*1=4*1+3=4*1+2*1+1

Serían siempre todos distintos, porque o se diferencian en el números sacado factor común o en las distintas potencias de 2

martes, 2 de abril de 2013

Función generatriz de combinaciones y variaciones



Combinaciones sin repetición
Ya vimos en la entrada de presentación de la teoría de las funciones generatrices

(http://hojaynumeros.blogspot.com.es/2013/03/funciones-generatrices-en-combinatoria_14.html)

esta relación


Es el clásico Binomio de Newton y nos da de forma inmediata la función generatriz (F.G.) de las combinaciones de n elementos sin repetición.

Esta forma de expresar los números combinatorios da lugar a demostraciones muy sencillas de algunas de sus propiedades. Observa esta identidad:

Si la desarrollas da lugar a la identidad de Vandermonde


Basta imaginarse cómo sería el producto de las dos potencias

De igual forma, de esta otra identidad


Nos resultaría


Basta con igualar términos con el exponente k

Así se podría demostrar otras similares.

Combinaciones con repetición 

La fórmula del binomio de Newton es válida también para exponente negativo, pero en ese caso los números combinatorios tendrían la forma



Pero la última expresión coincide con las combinaciones con repetición, luego



Sería, teniendo en cuenta los signos, la F.G. de las combinaciones con repetición.

Caso de elementos con repetición prefijada

Este es el caso con el que comenzamos a estudiar las F.G. en una entrada anterior. Si deseamos combinaciones con repetición, pero en las que algunos elementos tienen un máximo en su repetición (no se suele estudiar este caso en los niveles elementales), debemos usar otra técnica. Por ejemplo:

Disponemos de varias fichas en cada una de las cuales se ha dibujado una forma distinta. Por ejemplo esta distribución:



¿De cuántas formas distintas se puede tomar un conjunto de cinco símbolos? Al hablar de conjunto, no tendremos en cuenta el orden.

Basta usar, como ya vimos, un producto de polinomios en los que los exponentes representan las repeticiones posibles de cada símbolo:

F(x)=(1+x+x2)(1+x+x2+x3)(1+x+x2+x3+x4)

Buscamos con PARI su coeficiente de grado 5, que representa los elementos seleccionados:

print(polcoeff((x^2+x+1)*(x^3+x^2+x+1)*(x^4+x^3+x^2+x+1),5))

con un resultado de 11 posibilidades

Son estas (con la hoja Cartesius):



Podemos interpretarlas así:


Este método es general: para crear la F.G, en un caso de combinaciones con repeticiones prefijadas basta con formar polinomios de potencias para cada uno de los elementos y después multiplicarlos todos.

Funciones generatrices exponenciales


Hasta ahora hemos manejado combinaciones, no hemos tenido en cuenta el orden. Cuando éste interviene, para abordar las variaciones y permutaciones, necesitamos otro tipo de funciones generatrices, las exponenciales:

Dada una sucesión de números (en general complejos) {a0, a1, a2, a3,…an,….} llamaremos función generatriz exponencial de esa sucesión a la formada por


Es idéntica a la definición general, pero en cada término de la suma dividimos entre el factorial del exponente. La raíz de esta técnica está en el desarrollo del binomio de Newton, en el que podemos sustituir Cm,n por Vm,n/n!

De esta forma, si (1+x)m era la F.G. de las combinaciones, también será ahora la F.G exponencial de las variaciones. Esta idea no es de mucha utilidad así en general, pero nos será muy útil en lo que sigue.

Variaciones con elementos repetidos

Un caso que no se suele estudiar en las enseñanzas medias es el las variaciones en las que se permite un máximo de repeticiones para cada elemento. Por ejemplo, tomar variaciones de 4 elementos en este conjunto de elementos con repetición: AAABBCDD.

Efectuamos previamente un acercamiento sin F.G.

En la imagen hemos obtenido con Cartesius todas las posibles combinaciones, escribiendo en cada columna el número de veces que se toman A,B,C y D, contando después las distintas ordenaciones de cada una. La suma obtenida fue de 162 variaciones.



Probamos ahora con una F.G. exponencial para cada elemento, hasta 3 para A, 2 para B y D y una para C. Observa que los términos de los polinomios están divididos entre factoriales.

FG=(1+x+x^2/2+x^3/6)(1+x+x^2/2)(1+x)(1+ x+x^2/2)

Desarrollamos esta función con wMaxima


Nos resulta para el exponente 4 un coeficiente de 27/4, pero recordemos que es una F.G. exponencial, luego hay que multiplicar por 4! para encontrar el verdadero coeficiente, el número de variaciones:

27/4*4!=27*6=162, que confirma el resultado previo.

Lo que hemos aprovechado en realidad es que al escribir estos paréntesis cada elemento está representado por los órdenes que puede presentar. Si usamos este factor (1+x+x^2/2+x^3/6) lo que estamos comunicando es que x^2 presenta dos posibles órdenes (que al repetir el símbolo se han perdido) y que x^3 proviene de 6 órdenes (permutaciones con tres elementos)

Quiere decir lo anterior que las contribuciones al coeficiente final de x^4, 27/4, ya vienen descontados los órdenes que se han perdido al repetir. Al final, al multiplicar por el factorial de 4, nos quedamos con los órdenes verdaderos. Es un poco complicado de entender, pero estúdialo, que funciona.

Lo comprobamos para el variaciones de 3 elementos: el coeficiente es 26/3 y si multiplicamos por 3! nos queda 26*2=52

Lo comprobamos con Cartesius



Lo generalizamos sin demostración:

Para encontrar el número de variaciones con repetición en el que conocemos el número máximo de repeticiones de un elemento, sean por ejemplo k, aportaremos a la F.G. un factor del tipo 1+x+x2/2!+x3/3!+…+xk/k! por cada elemento.

Permutaciones con repetición

La función generatriz que hemos empleado para variaciones coincide con la de permutaciones si el coeficiente que buscamos coincide con el total de las repeticiones de símbolos. En el ejemplo que estamos usando, AAABBCDD, el total de elementos es 8. Busca en el desarrollo mediante wMaxima de arriba el exponente 8 de la F.G. y verás que es 1/24. Como estamos usando funciones exponenciales, el verdadero valor será (1/24)*8! = 1680.

En este caso no es necesaria la F.G., pues ya sabemos que el número de permutaciones de AAABBCDD se calcula mediante 8!/(3!2!1!2!) =8!/24 = 1680, pero es conveniente comprobar que en este caso también funciona la técnica de las F.G.





jueves, 14 de marzo de 2013

Funciones generatrices en Combinatoria– La teoría



En la entrada anterior presentábamos como un artificio sustituir los elementos de un producto cartesiano condicionado de conjuntos numéricos por polinomios en una indeterminada con exponentes idénticos a los números a combinar.

Hoy lo convertiremos en un desarrollo teórico.

Función generatriz de un conjunto numérico

Dado un conjunto ordenado de números reales o complejos (aquí usaremos casi exclusivamente los enteros positivos) {a0, a1, a2, a3,…an} llamaremos función generatriz (ordinaria) o generadora del mismo al polinomio de la forma


Si el conjunto tiene infinitos términos sustituiremos el polinomio por una serie de potencias, pero en este caso la igualdad


sólo tendrá sentido si dicha serie posee un radio de convergencia no nulo y la función está definida dentro de ese radio. No obstante, aquí  no trataremos la convergencia, sino las relaciones entre coeficientes. Si no converge, P(x) no será una función, pero las técnicas siguen valiendo.

Casos sencillos

El caso más sencillo de función generatriz es la que corresponde al conjunto {1,1,1,1,…1}
Si este es finito con n elementos, sabemos que su función generatriz se puede obtener mediante la fórmula de la suma de una progresión geométrica


Ya usamos esta fórmula en la entrada anterior

Si el conjunto es infinito {1,1,1,1,…}también es sencillo verificar que


Aquí nos encontramos con la potencia que tiene este método. Si derivamos miembro a miembro (omitimos detalles y también la cuestión de la convergencia) nos encontraremos con que

Por tanto esta es la función generatriz del conjunto {1,2,3,4,….}

La fórmula del binomio de Newton nos proporciona otro ejemplo de función generatriz. Los números combinatorios para un n dado tienen por función generatriz (1+x)n ya que


Podíamos seguir dando ejemplos hasta llenar páginas enteras, pero destacaremos especialmente dos técnicas

Manipulación algebraica

Con las técnicas algebraicas y sin plantearnos ahora el problema de la convergencia podemos encontrar la función generatriz de muchos conjuntos de coeficientes.

Por ejemplo, es fácil encontrarla para los números de Fibonacci F0, F1, F2,  F3,  F4…, de los que suponemos se conocen sus valores y propiedades. Observa estas manipulaciones:

F(x)=F0+F1x+F2x2+ F3x3+ F4x4+…=
F0+F1x+(F0+F1)x2+(F1+F2)x3+(F2+F3)x4+… =
F0+F1x+(F0 x2+ F1 x3+ F2 x4+…) + (F1 x2+ F2 x3+ F3 x4+…)

Pero en los paréntesis se está reconstruyendo F(x) de alguna forma, por lo que podemos escribir (pon tú los detalles)

F(x)= F0+F1x+F(x) x2+(F(x)- F0)x

Despejamos F(x), sustituimos F0 por su valor 0 (a veces se toma 1) y F1 por 1 y ya la tenemos:


Sólo hemos usado técnicas algebraicas sencillas. Más adelante comprobaremos este resultado.

Manipulación analítica

Si consideramos la derivación e integración formales podemos encontrar fácilmente funciones generatrices. Ya hemos considerado un ejemplo de derivación.

De la misma forma podemos usar la integración. Por ejemplo en la geométrica podemos integrar

Nos resultaría entonces



En cualquier manual puedes encontrar muchos ejemplos similares de este tipo de manipulación. No olvides que podemos mezclar las dos técnicas, analítica y algebraica, así como sumar, multiplicar y otras.

Problema inverso

Si la serie que define la función generatriz converge y conocemos esta, encontrar los coeficientes de la serie siempre es posible por la fórmula de McLaurin


Es un camino muy pesado, pero seguro. Sin embargo el problema contrario de dar los coeficientes y encontrar la expresión de P(x) quizás no lo puedas resolver. Es el clásico problema de la suma de series.

Con la ayuda de un ordenador se puede simplificar el proceso. Damos un ejemplo:

Antes vimos que los números de Fibonacci tenían como función generatriz (si se toma F0=0. A veces se toma F0=1 y entonces tiene una expresión ligeramente distinta)

Si tuviéramos posibilidad de desarrollar por McLaurin en algún lenguaje o programa, nos ahorraríamos mucho trabajo. Nosotros lo hemos hecho con el lenguaje PARI. Se entiende fácilmente aunque no se haya usado nunca:

{write("final.txt",taylor(x/(1-x-x^2), x,12))}

Ordenamos que escriba en el archivo “final.txt” 12 términos del desarrollo de Taylor (es en x=0) de la función dada. El resultado es:

0+x + x^2 + 2*x^3 + 3*x^4 + 5*x^5 + 8*x^6 + 13*x^7 + 21*x^8 + 34*x^9 + 55*x^10 + 89*x^11 + O(x^12)

Como vemos, los coeficientes son los números de Fibonacci. Si quisiéramos hacer F0=1 nos daría otro resultado, pues la función generatriz seria 1/(1-x-x2) (intenta demostrarlo)

Programaríamos en PARI esta variante:

{write("final.txt",taylor(1/(1-x-x^2), x,12))}

Obtendríamos la sucesión comenzando en 1:

1 + x + 2*x^2 + 3*x^3 + 5*x^4 + 8*x^5 + 13*x^6 + 21*x^7 + 34*x^8 + 55*x^9 + 89*x^10 + 144*x^11 + O(x^12)

Lo podemos intentar con el ejemplo de la entrada anterior, el de las bolas de colores, cuya función generatriz sin desarrollar era

Deberíamos escribir en PARI

{write("final.txt",taylor(x^5*(x^4-1)^2*(x^5-1)/(x-1)^3, x,20))}

Obtendríamos

x^5 + 3*x^6 + 6*x^7 + 10*x^8 + 13*x^9 + 14*x^10 + 13*x^11 + 10*x^12 + 6*x^13 + 3*x^14 + x^15 + O(x^20)

Identificamos los resultados de la entrada anterior: Con grado 9 el coeficiente es el esperado, 13. Para el grado 14 sólo 3 y para el grado 7 los 6 que ya se obtuvieron.

En otra entrada posterior veremos las funciones generatrices de combinaciones, variaciones y demás. Hoy seguiremos con ejemplos:

¿De cuántas formas se puede descomponer el número 28 como suma de primos distintos?

Los primos inferiores a 28 son 2, 3, 5, 7, 11, 13, 17, 19, 23. Cada uno de ellos o está en la suma una vez o no está. Entonces podemos usar términos del tipo (1+x^7) o (1+x^11) para combinarlos en la función generatriz:

F(x)= (1+x2) (1+x3) (1+x5) (1+x7) (1+x11) (1+x13) (1+x17) (1+x19) (1+x23)

Desarrollamos con wxMmaxima y nos da (hemos recortado la imagen):



Vemos que para el exponente 28 el coeficiente es 6, luego existen 6 formas distintas de expresar 28 como suma de primos distintos

Lo comprobamos con nuestra herramienta PARTLISTA (http://hojamat.es/sindecimales/aritmetica/herramientas/herrarit.htm#reprenum)



Con ella vemos las seis sumas: 28=11+17=5+23=3+5+7+13=2+7+19=2+3+23=2+3+5+7+11

Con la función generatriz hemos conseguido también otros muchos coeficientes, pero cuidado con la lista de primos 2, 3, 5, 7, 11, 13, 17, 19, 23. Este desarrollo sólo valdría hasta el 28. Para números mayores deberíamos añadir (1+x^29)(1+x^31)…

Luego con la función generatriz podemos resolver varios problemas a la vez.

Estos desarrollos algebraicos son pesados incluso con ayuda de los CAS. Sería bueno elegir un solo coeficiente en ellos. El lenguaje PARI que estamos usando últimamente (es gratuito aunque de gestión poco amigable) posee la función POLCOEFF(P(x),E) en la que P(x) es un polinomio y E un exponente dado, y nos devuelve el coeficiente de ese polinomio correspondiente al grado E. Nuestro problema del 28 se calcularía así:

print(polcoeff((x^2+1)*(x^3+1)*(x^5+1)*(x^7+1)*(x^11+1)*(x^13+1)*(x^17+1)*(x^19+1)*(x^23+1),28))

Daría un resultado de 6. Si cambiamos 28 por un número inferior obtendremos más resultados. Para números superiores deberíamos incrementar los primos.