通过任何操作,三个自然数可以存储在少于3个变量中吗?
假设我们在0-150范围内有三个数字,例如:255,12,67.数字彼此无关.
现在存储它们我们需要三个变量或一个数组,但是可以通过任何数学运算将这些数字存储在2个变量中吗?
kil*_*nan 10
你可以,但这取决于三个数字的范围......
如果您知道存储的是2字节的无符号类型,那么您将有16位,因此使用这种模式
aaaabbbbbccccc0
Run Code Online (Sandbox Code Playgroud)
您将能够存储3个5位数.您可以通过移动或分割来检索值:使用上面的模式
a = n / (2^11)
b = (n % 2^11) / 2^6
c = (n % 2^6) / 2
Run Code Online (Sandbox Code Playgroud)
哪里
你可以存储三个自然数a,b,c如
x = 2^a * 3^b * 5^c
Run Code Online (Sandbox Code Playgroud)
要检索原始数字,您可以进行素数分解,x并找到a指数2,b作为指数3和c指数5.
这样,您可以通过使用更多素数在一个自然数中存储无限多个自然数.为了确保您不会丢失信息,您可能希望将一个BigInt类用于任意大数.