大小大于 2147483647 的 BooleanArray

BooleanArray with size larger than 2147483647

我正在尝试在 Kotlin 中实现阿特金筛法。我希望它支持最多 2^32-1 的数字,所以筛子必须是一个 UInt 索引数组。
我尝试像这样初始化筛子:

var sieve = BooleanArray(limit + 1u)

然后,我得到错误:

error: type mismatch: inferred type is UInt but Int was expected

那么,有什么方法可以使 BooleanArray(或等效)存储至少 4294967295 个值?

最简单的方法可能是使用 UInt 作为大小,然后在内部映射 2 个公共 BooleanArray,它使用 Int 进行寻址,尽管永远不可能有负索引值(这似乎是一个设计错误——或者至少是缺乏优化)。这意味着,那个人也可以用带符号的 Int 来解决所有问题。我的意思是,在内部将负值映射到一个 BooleanArray,将正值映射到另一个 BooleanArray。实际问题似乎是,正在传递带符号的 Int,但只能使用正范围 (50%) 来寻址数据。可以使用 absoluteValue,因为数组填充的方向无关紧要。