MATHEMATICA例程2——小数循环节

Standard

 

Hello大家好,这里是Mathematica例程大讲堂。

之前发现从关键词 Mathematica 过来的搜索流量偏高,于是便跑过来填这个许久之前挖的坑。上一篇文章是讲关于如何用 Mathematica 生成 Look And Say 序列,反复看了之后觉得难度太高,不适合初学,于是这次便来讲一点简单的、比较基本的例子。


一、主要目标

这次要计算的是 1/n 的小数部分的最小循环节长度,其中 n 最好是质数,例如:

1 / 3  = 0.333...
1 / 7  = 0.142857142857...
1 / 19 = 0.0526315789473684210526...

1/7 的循环节是"142857",有6位,而 1/19 的循环节是"052631578947368421",有18位,以此类推。

如果你觉得从中找到了规律,不妨来猜一下 1/81,1/9801 的循环节长度是多少位呢?^_^


Continue reading

三个小伙伴之Map的构造

Standard

三个小伙伴一文中,我们介绍了cons, car, cdr这三种基本操作,此文作为续集,便是要讲解一些“组合技”,以及一些Scheme的语法,也为之后讲解Mathematica的语法打基础。请读者做好心理准备,因为在下文中你将会看到一连串的括号,这是Lisp/Scheme的“特色”。不过不用太担心,我会尽量用标准的语法缩进来规范这些代码,保证其清晰可读。

 

Continue reading

三个小伙伴

Cube_World_Banner
Standard

CONS, CAR, CDR,三个有爱的小伙伴。在Lisp/Scheme语言中,它们(某种程度上)构成了数据结构的基础。

 

STEP 1 Friends, Toys.

这三个小伙伴实际上对应着三种不同的操作,为解释这点,我们考虑如下图所示的“盒子”:

┏━┯━┓
┃X │ Y ┃
┗━┷━┛

这个“盒子”由左右两部分组成,这样的结构也被称为点对(pair)。以 P 代表上面的结构,其左半部分是元素X,右半部分是元素Y。

 

这样,三种操作就可以解释了:

car 的作用是取出一个点对的左半部分,当其作用在 P 上就会得到元素X。无独有偶,cdr念作could-er)的作用是取出一个点对的右半部分。而cons的作用便是将两个元素组装成pair。于是便有如下的关系:

(car P) = X

(cdr P) = Y

(cons X Y) = P

注:这是一种前序表示法,每个括号内的第一个元素会被当成运算符,后面紧接着的会被当成参数。

例如 (+ 3 2) 可以表示 3 + 2(func a b) 可以表示 func(a, b) 等。

 

到此为止,有关数据结构的基本语法已经讲完了。“怎么可能?就凭这种一年级水平的搭积木一样的东西?”不要着急,且听我娓娓道来。

Continue reading