在this StackOverflow question和fix provided by @smichr之后,我尝试了以下操作:
>>> from sympy import *
>>> k,m,n = symbols("k m n", integer=True)
>>> (3*k+4)%2 - k%2
0 # it works with the fix above. Thank you!
>>> p = Wild('p')
>>> q = Wild('q')
>>> e = (2*k+7)%5 + 7*k+7
>>> e
7*k + Mod(2*k + 2, 5) + 7
>>> e.match(p%5+p)
>>> e.match((p+5*q)%5+p)
>>> e.match(p%5+p+5*q)
{q_: k + 1, p_: 2*k + 2}
我希望第一个或第二个e.match
为我工作(第一个{p:7*k+7}
和第二个{p:7*k+7,q:-k}
),但没有。这是错误吗?如果是,是否有修复/解决方法?
答案 0 :(得分:1)
(复制我在the SymPy issue上写的相同内容)
比赛具有非常有限的数学知识。不知道2*k
中的Mod
是否可以替换为7*k
。
我不确定这是否容易解决。使用有限的数学匹配,匹配已经相当复杂。解决此类问题可能需要更好的设计。实际上,这让我感到震惊,这是您需要SMT求解器解决的问题,但是也许有更简单的算法可以解决。
对不起,这无法直接解决问题。