Estoy intentando implementar el tamiz de Atkin en Kotlin. Quiero que admita números hasta 2 ^ 32-1, por lo que el tamiz debe ser una matriz UInt .
Intento inicializar el tamiz de esta manera:
var sieve = BooleanArray(limit + 1u)Entonces, me sale el error:
error: type mismatch: inferred type is UInt but Int was expected Entonces, ¿hay alguna forma de hacer que un BooleanArray (o equivalente) almacene al menos 4294967295 valores?
Lo más fácil podría ser usar UInt como el tamaño y luego mapear internamente 2 BooleanArray comunes, que usan Int para el direccionamiento, a pesar de que nunca podría haber un valor de índice negativo (esto parece ser una falla de diseño, o al menos una falta de optimización ). Lo que significa que también se podría abordar todo con Int firmado. Quiero decir, para mapear internamente los valores negativos a un BooleanArray y los valores positivos a otro BooleanArray . El problema real parece ser que se pasa un Int firmado, pero solo el rango positivo (50%) se puede usar para direccionar datos. Uno podría usar absoluteValue , porque no importa en qué dirección se llena la matriz.