只需使用加法、减法和移位就可以将两个数字相乘。该过程的重要部分是找到此类操作的最小(最佳)序列。使用蛮力找到序列会导致难度呈指数增长,因此使用了各种启发式方法,也许最常见的是Robert Bernstein的论文乘以整数常数。
乘以 113 的示例,如Vincent Lefevre的乘以整数常数中所述:
3x <- x << 1 + x
7x <- 3x << 1 + x
113x <- 7x << 4 + x
我偶然发现了一个非常有趣的答案,这让我想知道:是否可以使用 Z3(或类似的)来找到将数字乘以给定常数的最小运算符序列?我对所有这些 SAT 和 SMT 都很陌生,所以我不确定它在布尔可满足性问题的背景下是否有意义?