TSC999 发表于 2016-9-22 10:37:21

这个解方程的小程序错在哪里了?怎样修改?

问题:有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]

TSC999 发表于 2016-9-23 12:12:04

原帖子中,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 互质呢?

mathematica 发表于 2017-4-17 12:17:09

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]
查看完整版本: 这个解方程的小程序错在哪里了?怎样修改?