我有以下线性方程。
m = 2 ** 31 - 1
(207560540 ∗ a + b) modulo m = 956631177
(956631177 ∗ a + b) modulo m = 2037688522
求解这些方程的最有效方法是什么?
我使用了 Z3 但它没有找到任何解决方案。我为 Z3 求解上述方程的代码是:
#! /usr/bin/python
from z3 import *
a = Int('a')
b = Int('b')
s = Solver()
s.add((a * 207560540 + b) % 2147483647 == 956631177)
s.add((a * 956631177 + b) % 2147483647 == 2037688522)
print s.check()
print s.model()
我知道答案是:a = 16807, b = 78125,但是,我怎样才能让 Z3 解决它呢?
我尝试的另一种方法是将 a 和 b 设置为 BitVec() 而不是 Integers ,如下所示:
a = BitVec('a', 32)
b = BitVec('b', 32)
这给了我一个不正确的解决方案,如下所示:
[b = 3637638538, a = 4177905984]
有没有办法用Z3解决它?
慕妹3146593
相关分类