mathematica编程的循环问题

如数组s1={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},现要删除2的倍数的数,删除3的倍数的数,,删除5t+... 如数组s1={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20},现要删除2的倍数的数,删除3的倍数的数,,删除5t+2的数,最后得到s2=={1,5,11,13,19},,怎么编程?象这种分步问题怎么使用"循环"编程?谢谢老师解答!! 展开
 我来答
xzcyr
2013-07-19 · TA获得超过3395个赞
知道大有可为答主
回答量:1399
采纳率:100%
帮助的人:752万
展开全部

这样:

s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
DeleteCases[s1, a_ /; (Mod[a, 2] == 0 || Mod[a, 3] == 0 || Mod[a, 5] == 2)]

 还可以这样:

s1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
Select[s1, Mod[#, 2] != 0 && Mod[#, 3] != 0 && Mod[#, 5] != 2 &]

顺便,进了Mathematica的门,就早点把循环忘掉吧,那不是Mathematica的编程风格。


再顺便,慧河谷同学你要匿名何不把说话风格也改一改,知道上问Mathematica问题的人只有你老师老师的叫(还连续N个问题不采纳)。

追问
可能我没说清楚,我需要的是怎么实现数组的批量输入(不是一个一个地输入).假设有1000个模对应着1000个剩余,怎么批量输入?例如:s=Table[i, {i,2000}];
m=Table[Prime[n+1], {n, 1000}];
r=Table[Prime[n], {n, 1000}];
其中s是一个数组, m是模, r是与m一一对应的余数,怎么得到删除后的结果?谢谢!
追答

……把你之前学到的知识组合在一起不就行了吗。手机不便,你明天还没想出来我再补充。

————

怎么,没想出来吗:

s = Table[i, {i, 2000}];
m = Table[Prime[n + 1], {n, 1000}];
r = Table[Prime[n], {n, 1000}];
rule = Or @@ Thread[Mod[a, m] == r]
DeleteCases[s, a_ /; Evaluate@rule]
rule2[a_] = And @@ Thread[Mod[a, m] != r]
Select[s, rule2]
草红样
2013-07-26 · TA获得超过240个赞
知道小有建树答主
回答量:137
采纳率:0%
帮助的人:153万
展开全部
如果在意速度的话,可以用Pick,向量化的操作一般更快

ls = Range[10^5];
Pick[ls, Mod[#, 2] Mod[#, 3] (Mod[#, 5] - 2) &@ls // Unitize, 1] // Timing
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
青衣瓦屋
2013-07-20 · TA获得超过274个赞
知道小有建树答主
回答量:158
采纳率:100%
帮助的人:137万
展开全部
楼上正解!这里补充另一个思路^^
针对追问代码如下:
Fold[ Complement, s, Range[ #1, 2000, #2]&@@#&/@ Thread[ { r, m } ] ]
追问
比较满意,若s是连续数,确实不错,假设s是一个任意数组该怎么写?例如:s={1,5,10,12,14,15,18,20,30,40,50,60,70,80,100},m={2,5,7,11,13},r={0,1,2,,5,10}.谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式