找回密码
 欢迎注册
查看: 25814|回复: 8

[原创] 用mathematica计算中国剩余定理

[复制链接]
发表于 2011-3-12 09:41:25 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?欢迎注册

×
只给出一个具体的例子, 比如求 x=2mod3 x=1mod4 x=2mod5 则只需要输入 ChineseRemainder[{2,1,2},{3,4,5}] 得到17 如果再加一个条件 x=3mod6 则 ChineseRemainder[{2,1,2,3},{3,4,5,6}] 得到空集(没输出结果),也就是没有解的意思 需要注意的是得到的只是最小的正整数解, 如果想得到所有的解,那么必须加上 GCD[3,4,5]而不是3*4*5(虽然这两者相等) 比如 ChineseRemainder[{1, 3}, {2, 4}] 求的是x=1mod2 x=3mod4的最小正整数解 结果是3,但是全部解是x=3mod4(GCD[2,4]=4),而不是 x=3mod8(2*4=8) 这个在高手很简单,但是我写出来,让大家都能够受惠,我 其实是写给初学者的,也是在中国普及mathematica, 当然我的普及是很小很小的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-3-12 09:47:22 | 显示全部楼层
在百度中输入:mathematica 计算中国剩余定理 得到的第一个搜索结果是: pari中如何计算中国剩余定理? http://bbs.emath.ac.cn/thread-1004-1-1.html 得到的结果居然是我写的. 不过与mathematica软件没太大关系,倒是与用户mathematica 有不小的关系,其实我原本想找到mathematica如何计算中国剩余定理, 由此看来,搜索引擎毕竟是机器,还是不够智能呀! 为了使得那边的用户能够看到这边的帖子,我决定把这边的链接发送到那边!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-3-12 09:53:20 | 显示全部楼层
哎!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 在google中输入:mathematica 计算中国剩余定理 居然被墙!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 太垃圾了,讨厌,连中国剩余定理都要封杀!!!!!!!!!!!!!!!!! 仅仅是因为这个“中国剩余定理”中包含“中国”二字, 不过搜索结果的第一个仍旧是我写的帖子: pari中如何计算中国剩余定理? http://bbs.emath.ac.cn/thread-1004-1-1.html 具体如何做到自己可以去努力吧,如果用Google搜索不到这个 结果,可以考虑联系我!!!!!!!!!!!!!!!!!!!!! 其实我乐于在数学研发论坛发帖,就是因为我觉得我的帖子也许 某天某日某时某刻能“造福”某人,虽然我并不知道是否能够“造福” 别人以及如果“造福”了别人却不知道是谁!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-3-12 10:02:12 | 显示全部楼层
a = Range[10] b = Table[Prime[n], {n, 10}] ChineseRemainder[a, b] 这么短的程序,我就不给注释了,初学者也应该能看明白的(不过我本身也是初学者,虽然 我在2005、2006年这样就接触Mathematica了,但是由于没有电脑,所以一直没好好认真 学过!)
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2011-11-15 15:09:41 | 显示全部楼层
能算出最小适合下面条件的数吗? x=5mod11 x=9mod13 x=3mod17 x=13mod37 x=19mod31 x=17mod43 x=11mod123 类似这样的我倒也能运行。 不过由于编程水平太低,只能运行类似这样十位以下的数字,除数也不能过大。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2011-11-17 18:47:38 | 显示全部楼层
能算出最小适合下面条件的数吗? x=5mod11 x=9mod13 x=3mod17 x=13mod37 x=19mod31 x=17mod43 x=11mod123 类似这样的我倒也能运行。 不过由于编程水平太低,只能运行类似这样十位以下的数字,除数也不能过 ... 海里游 发表于 2011-11-15 15:09
随便建立一个文本,重新命名为123.gp,输入以下内容: chinese(Mod(5,11),Mod(9,13)) chinese(Mod(3,17),%) chinese(Mod(13,37),%) chinese(Mod(19,31),%) chinese(Mod(17,43),%) chinese(Mod(11,123),%) 然后在pari/gp中输入 \r 123 (表示读入上面的文件) 最后一个结果就是你所需要的计算结果!
QQ截图parigp.jpg
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-4-26 16:39:37 | 显示全部楼层
我写了一个pari/gp的子函数,然后可以直接调用这个子函数得到结果! 其实很简单的! 子函数见附件! 命令见图!
chineseM.png

chineseM.gp

424 Bytes, 下载次数: 0, 下载积分: 金币 -1 枚, 经验 1 点, 下载 1 次

毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-4-26 16:40:48 | 显示全部楼层
为了方便不愿意注册论坛的人看到这个子函数,我把子函数贴出来! /*计算多个同余的中国剩余定理*/ \\日期:2012年4月26日16:39:15 \\例子:chineseM([1,2,3],[2,3,5])=chinese(Mod(1,2),Mod(2,3),Mod(3,5)) chineseM(a,b)= { local(c,n); c=chinese(Mod(a[1],b[1]),Mod(a[2],b[2]));\\初始用来循环计算的值 n=length(a); for(k=3,n, c=chinese(c,Mod(a[k],b[k])) );\\循环计算多个同余的中国剩余定理 c \\返回c的值 }
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2012-7-13 12:36:47 | 显示全部楼层
顶我自己!!!!!!!!!!!!!!!!!
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

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

GMT+8, 2024-12-23 10:40 , Processed in 0.036555 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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