<p>从数学上讲,这个问题意味着我们正在寻找
以下等式的整数解(对于x和y):</p>
<p>x*R-y*L=G-S</p>
<p>我们可以从创建一个函数开始,快速检查是否有解决方案:</p>
<pre><code>def path(S, G, F, L, R):
x=0
while True:
y = (x * R - G + S) / L
if y>=0 and int(y)==y:
return(x,y)
else:
x+=1
</code></pre>
<p>如果有解决方案,这将起作用,但如果没有,则不行。
可以从数学上证明,当L为R而不是G-S时,不存在解。以下是证明:</p>
<p>如果
R模块L=0(左设备R)
(G-S)/L!=0(L不分G-S)</p>
<p>然后将整个方程(x*R-y*L=G-S)除以L,我们得到:</p>
<p>x*R/L-y=(G-S)/L<=&燃气轮机</p>
<p>y=(x*R/L)-(G-S)/L</p>
<p>现在,我们想要y mod 1=0(意味着y是整数)表示x mod 1=0(x整数)。使用常见的模运算,我们采用:</p>
<p>y模式1=[(x*R/L)-(G-S)/L]模式1=</p>
<p>[(x*R/L)模式1-((G-S)/L)模式1]模式1=</p>
<p>[(x模式1*(R/L)模式1)模式1-((G-S)/L)模式1]模式1=</p>
<p>[(x模块1*0)模块1-((G-S)/L)模块1]模块1=</p>
<p>[((G-S)/L)模式1]模式1</p>
<p>如果L不划分G-S,这不可能是0,这最终意味着没有一对整数x,y可以满足原始条件</p>
<p>从程序上来说,这意味着我们的代码增加了以下内容:</p>
<pre><code>def path(S, G, F, L, R):
if R%L==0 and (G-S)%L != 0 :
return 'No solutions'
x=0
while True:
y = (x * R - G + S) / L
if y>=0 and int(y)==y:
return(x,y)
else:
x+=1
</code></pre>
<p>我不知道;I don’我不知道我们是否能从数学上证明上述假设是唯一的例外,它可能可以用更多的模运算来证明。通过编程,我们可以在代码中添加一些时钟,这样,如果没有解决方案,这意味着它将进入Infive循环,我们可以在一段时间后返回False。以下是我们如何做到这一点:</p>
<p><a href="https://stackoverflow.com/questions/13293269/how-would-i-stop-a-while-loop-after-n-amount-of-time">How would I stop a while loop after n amount of time?</a></p>