Q 中的大整数类型

Big integer type in Q

长 "long" 不足以存储我所做的数字/计算。

我试图解决欧拉项目中的问题 16: https://projecteuler.net/problem=16

但我做不到,因为 2^63 越来越大,无法存储

q)prod2: {[y] (y-1) {x*2}/ 2}
q)prod2(63)
0N
q)prod2(62)
4611686018427387904

(我需要计算prod2(1000)

你不能在 long 数据类型中存储那么大的数字,因为它超出了它的限制。有2个选择:

A) 用支持 Java 等大整数的其他语言实现您的逻辑,并在您的 KDB 进程中调用该代码。

B) 如果你想在 KDB 中实现这个,那么你将不得不使用其他数据结构,如向量或字符串来存储大数。

例如在布尔向量中表示 2^62:

q) 1b,62#0b

阅读有关计算整数幂并实现其中一种算法的信息。还有一些算法适用于二进制表示。

您可以在此处阅读更多内容:https://en.wikipedia.org/wiki/Exponentiation_by_squaring