找回密码
 欢迎注册
查看: 25234|回复: 5

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

[复制链接]
发表于 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 这三个数。

我用解方程的办法编写了下面这个小程序,却执行错误。不知毛病出在哪里?
  1. Solve[{GCD[a, b] == 12, GCD[a, c] == 15,
  2.    LCM[a, b, c] == 120}, {a, b, c}, Integers]
复制代码
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2016-9-23 12:12:04 | 显示全部楼层
原帖子中,mathematica 不允许 GCD[a,b]==12 以及 LCM[a,b,c]==120 之类的语句作为一个方程出现(希望将来更高的版本允许这样做 )。

为此,有人提出了下面的解决方案(从定义出发列方程):
  1. Solve[{a == 12×5 p , b == 12 q, c == 3×5 r, a b c/(12×15) == 120,
  2.   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[p, r]=1 来代替 r≠2 就好了,但是方程中不可以使用这样的语句。
在方程中有什么办法表示 p 与 r 互质呢?
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2017-4-17 12:17:09 | 显示全部楼层
  1. Clear["Global`*"];(*Clear all variables*)
  2. Do[If[GCD[a,b]==12&&GCD[a,c]==15&&LCM[a,b,c]==120,Print[{a,b,c}]]
  3. ,{a,60,120,60},{b,12,120,12},{c,15,120,15}]
  4. Do[If[GCD[a,b]==12&&GCD[a,c]==15&&LCM[a,b,c]==120,Print[{a,b,c}]]
  5. ,{a,1,120},{b,1,120},{c,1,120}]
复制代码

土法炼钢,
穷举法是最好的办法
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2024-12-23 00:09 , Processed in 0.035056 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表