0votos
Booleanos y numeración en Haskell
por

josejuan

hace 5 años

Se puede establecer una biyección entre la lista de bits solicitada y el ordinal de cada bit. Para ello, basta ver que hay "n * 2^n" bits (de 0 a n*2^n-1) y que cada uno de los 2^n números contiene n bits. Así, dado el ordinal 'x', su bit estará a cero, si es cero el valor (x/n)&(1<<(n-x%n-1)). Si se quieren empaquetar, pues sólo es tomar de n en n la secuencia indicada.

0votos
Finales de Mersenne en Haskell
por

josejuan

hace 5 años

Calculo cualquier nº de dígitos de cualquier nº Mersenne. Solo hay que fijarse, que el módulo de un número, es el módulo del producto de los módulos de cualquieras factores. Y que la suma o resta del número, puede hacerse sobre el módulo. Así, podemos reducir la potencia M-ésima y luego restar uno a su módulo. Varios speedups son posibles (yo hago bipartición), memoize, etc... pero éste no es lento.