这个解方程的小程序错在哪里了?怎样修改?
问题:有3个正整数 a, b, c, 已知GCD(a, b)=12,GCD(a, c)=15, LCM(a, b, c)=120,求 a, b, c 这三个数。我用解方程的办法编写了下面这个小程序,却执行错误。不知毛病出在哪里?
Solve[{GCD == 12, GCD == 15,
LCM == 120}, {a, b, c}, Integers] 原帖子中,mathematica 不允许 GCD==12 以及 LCM==120 之类的语句作为一个方程出现(希望将来更高的版本允许这样做 )。
为此,有人提出了下面的解决方案(从定义出发列方程):
Solve[{a == 12×5 p , b == 12 q, c == 3×5 r, a b c/(12×15) == 120,
p > 0, q > 0, r > 0, r != 2}, {a, b, c, p, q, r}, Integers ]
可以得到正确结果:
{{a -> 60, b -> 24, c -> 15, p -> 1, q -> 2, r -> 1}, {a -> 120,b -> 12, c -> 15, p -> 2, q -> 1, r -> 1}}
但是,这样做有点小瑕疵,就是人为地判断出 r 不能等于 2.如果能用 GCD=1 来代替 r≠2 就好了,但是方程中不可以使用这样的语句。
在方程中有什么办法表示 p 与 r 互质呢? Clear["Global`*"];(*Clear all variables*)
Do==12&&GCD==15&&LCM==120,Print[{a,b,c}]]
,{a,60,120,60},{b,12,120,12},{c,15,120,15}]
Do==12&&GCD==15&&LCM==120,Print[{a,b,c}]]
,{a,1,120},{b,1,120},{c,1,120}]
土法炼钢,
穷举法是最好的办法
页:
[1]