IBM Research

谜题   IBM-132

五次运算实现可容忍双盘失效的编码

IBM Research · Ponder This · 2009 年 4 月

IBM Ponder This #132 · 2009 年 4 月

设计一个存储编码,把 24 个信息比特编码到八块磁盘中,每块存四个比特。依次取各盘的半字节,合成一个 32 位整数 f(x)。要求:

  1. f 只用五次运算即可计算。每次运算只能选自 +、-、*、/、%、&、|、~,分别表示加、减、乘、整数除法、取模、按位与、按位或、按位非;运算作用于可变长度整数。
  2. 任意两块盘损坏、导致对应两个半字节不可读后,仍能恢复原来的 24 个比特。读取时知道哪两块盘损坏。

官方提示

  • 4 月 6 日:可采用 f(x)=((((x*c1)&c2)*c3)&c4)%c5。
  • 4 月 24 日更新:c1=(2^792-1)/(2^33-1),c2=(2^816-1)/(2^34-1),c4=(2^1088-1)/(2^34-1)。

找出满足要求的编码。

解答

认真尝试后再打开

待补充。