爱吱声

标题: 小小的停留之四 幸运数 [打印本页]

作者: 到处停留的叶子    时间: 2014-7-16 11:30
标题: 小小的停留之四 幸运数
上次说到  小小的停留之三 “计算机之父” 天才的数学家冯·诺伊曼: C! u+ r8 J3 U, X( p1 ~4 k) b
看冯·诺伊曼的故事,他有句名言:“若人们不相信数学简单,只因他们未意识到生命之复杂。”6 _. X6 P7 t0 I8 c
' I0 T/ b, C: l7 ]' \
他有个好朋友,据说是最好的朋友,是生于匈牙利的波兰犹太人数学家乌拉姆,这位先生曾参与曼克顿计划(核武器上有Teller-Ulam design,Teller指爱德华·泰勒)。他亦有参与研究核能推动的航天飞机。在纯数学上,遍历理论、数论、集合论和代数拓扑都有他的足迹。
8 |9 E: L; `* M- Z( g4 D) w- q) [; x1 f4 n7 |
所以我在这里要说的幸运数不是中餐馆的饼干里给你的数字,也不是买彩票开奖的数字,而是在1955年波兰数学家乌拉姆提出的一个自然数列,用类似埃拉托斯特尼筛法的算法后留下的整数集合。
6 X" }( e  R# E- t3 k  W$ Z7 F4 ~- L! N. K. M
In number theory, a lucky number is a natural number in a set which is generated by a "sieve" similar to the Sieve of Eratosthenes that generates the primes.
1 r/ B- `- W1 I6 ^, ]" h5 E  f; P' B4 G* {9 |$ b4 Z9 d6 p
幸运数的定义
! ?& z5 W* g# o4 H* o2 cFORMULA        # L! V% _$ ]) a- s, r
Start with the natural numbers. Delete every 2nd number, leaving 1 3 5 7 ...; the 2nd number remaining is 3, so delete every 3rd number, leaving 1 3 7 9 13 15 ...; now delete every 7th number, leaving 1 3 7 9 13 ...; now delete every 9th number; etc.
3 s/ t$ E7 l( S, Q: L5 @
0 N. g7 x% v3 j8 t具体一点来说说幸运数列怎么筛选出来的(喜欢数论的同学一定知道挑选素数的埃拉托斯特尼筛法,这个办法是类似的)
, S9 Y! O  {- ?. C4 S( G0 \9 q* t, J$ c: J: m  o
初始,从1开始的自然数列:4 U& F4 g* w: h0 ?; ~+ o/ z5 @
Begin with a list of integers starting with 1:
( m2 C5 N3 W% F. C1        2        3        4        5        6        7        8        9        10        11        12        13        14        15        16        17        18        19        20        21        22        23        24        25  ……
" w5 U5 Z* i/ F+ v: G
$ l5 p# B; [- ~) Y- l开始删除,在这个数列里,从2开始,首先是每隔2个数字,删除第二个数字。剩下来的数字是奇数~~
1 P6 p" d/ _; _' o" \1 D3 g6 X剩下的数列如下:
! _* r* a7 ?6 `4 f' oEvery second number (all even numbers) is eliminated, leaving only the odd integers:" x0 g- ^; g6 ?1 {
1                3                5                7                9                11                13                15                17                19                21                23                25  ……
- q6 o( b* {( x2 l; Q4 W% ~0 K% }% [7 Y2 U( q" p
接下来是3,每隔3个数字删除第三个。剩下的数列如下:8 R) ]! ^' i; v0 m% c
The second term in this sequence is 3. Every third number which remains in the list is eliminated:( H$ r' L; a8 L6 P( L' _. {. D+ V0 k
1                3                                7                9                                13                15                                19                21                                25  ……9 H, d5 c. D, Q3 B4 @; m
# Z2 j2 M$ m; K$ q9 ~5 q
现在接下来的数字是7,所以把上述数列中每第七个删除,剩下的数列是:
* Z8 |: I. x# b0 \The next surviving number is now 7, so every seventh number that remains is eliminated:
: V9 L' k( O7 U' f2 E4 x) P+ A$ U1                3                                7                9                                13                15                                                21                                25  ……
5 C8 J7 }# n7 r2 ]% P  W+ E
; q! {0 C+ S2 [6 W* M( H5 P0 n接下来是9,……6 P' y9 A! o$ K  F9 M$ ]% m* W
这个过程可以一直无限继续下去,被幸运地留下来的数字就是幸运数。; I4 g0 R3 u' H, F3 ^2 |# ?
4 W- W# F( \3 n  L( O
1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, 87, 93, 99, ... (sequence A000959 in OEIS).
# c/ z# P  L. [/ e# {在OEIS编号为A000959的数列就是Lucky numbers9 h! h$ e( H( y8 r
上述链接给了一个稍微长一点的幸运数列:
. _/ f1 S& r6 _1, 3, 7, 9, 13, 15, 21, 25, 31, 33, 37, 43, 49, 51, 63, 67, 69, 73, 75, 79, 87, 93, 99, 105, 111, 115, 127, 129, 133, 135, 141, 151, 159, 163, 169, 171, 189, 193, 195, 201, 205, 211, 219, 223, 231, 235, 237, 241, 259, 261, 267, 273, 283, 285, 289, 297, 303 ……) L6 u* J: R- i! Z* F
& F- v6 E: i0 I% Q* J. t% i
有没有同样喜欢看数字的同学告诉我,你看了这个数列发现的是什么呢?
, w* A  F% H/ N) y5 c; j5 D0 p1 t& a6 b) Z% t

0 `  r, F6 E( Q" T* {' d9 K3 e3 O: J, R$ \3 F
第一个短一点的数列,我发现,1,3,5,7的平方(1,9,25,49)都是幸运数,但9的平方81就不是,于是马上想,那么是不是只有奇素数的平方才是幸运数呢?答案是不,11的平方也不是。于是叶子的第一个猜想就在几秒里被叶子证明是错误的。. d+ f' r9 }0 \' F: i

" U* @! `5 v# ~, p3 w- G5 D数论里的各种数列是数学里最容易上手理解的,不过最迷人最折磨人的也是它。著名的例子就是哥德巴赫猜想(Goldbach's conjecture)。, t7 C- m+ ?) H; V& x
幸运数的挑选过程,类似上面提到过的埃拉托斯特尼筛法挑选素数的过程,同时也和这个著名猜想有关。4 q3 i; y% W+ I( `. }( `
另外幸运数也曾经在正式进入书面讨论的时候被建议叫做 "the sieve of Josephus Flavius",因为它的挑选让大家想到著名的约瑟夫斯问题。6 H8 T1 h0 x' v5 d  ?$ c" h7 Q5 Q
) U6 N0 h" e+ y! a7 `; I
暂时就到这里吧,接下去要不要继续聊引出来的概念和问题呢?! Q) y( A, r. R

( o$ O  k' z: M; _4 s  [. ^**什么叫做Conjecture?1 K+ H( O* K& g+ P: o! ?/ S! F
**约瑟夫斯问题。
作者: 到处停留的叶子    时间: 2014-7-16 21:26
猜想(conjecture)和假说(Hypothesis)$ t. e) P# S( O- p2 w7 A% N

0 R! u: D8 _# B1 u7 g$ d猜想(conjecture)是一个看上去是真的,但尚未被证明的叙述。比如说上面提到的数学数列,因为它表现的没有规律和无限性,基于观察的某些结论,如果不能用科学逻辑的方法来证明在无限的未来它都是真的,那么之前所观察到的所有事实都仅仅是看上去是正确的。& X, v" O6 I# y+ j' E. z3 j0 ]

8 w) H) T* g3 o3 H当猜想被证明后,它便会成为定理。猜想一日未成为定理,数学家都要小心在逻辑结构之中使用这些猜想。
- J- J5 D+ D! V8 P* {# _/ ~5 d& p7 X9 u, q( F1 ?
猜想主要因为类比推理和偶然发现的巧合而出现。数学家通常会使用不完全归纳法,来测试自己的猜想。例如费马曾经根据首四个费马数是素数,便猜想所有费马数都是素数(此猜想已被推翻)) n* Q( L. {4 F
6 j3 E0 C. r2 ~# a" ^2 x9 t
假说(Hypothesis),即指按照预先设定,对某种现象进行的解释,即根据已知的科学事实和科学原理,对所研究的自然现象及其规律性提出的推测和说明,而且数据经过详细的分类、归纳与分析,得到一个暂时性但是可以被接受的解释。任何一种科学理论在未得到实验确证之前表现为假设学说或假说。
, w/ s; r. K& |- E4 `: ]$ ?) z. p$ r7 V& D/ ~
有的假设还没有完全被科学方法所证明,也没有被任何一种科学方法所否定,但能够产生深远的影响。如1900年德国物理学家马克斯·普朗克为解决黑体辐射谱而首先提出量子论(量子假说)。
作者: 农民家的狗    时间: 2014-7-16 21:58
不明觉厉
作者: 到处停留的叶子    时间: 2014-7-17 06:50
本帖最后由 到处停留的叶子 于 2014-7-16 17:53 编辑 % R5 Y6 Z1 X$ {# E
6 Y- _$ C/ v4 R1 \! Q: j! k+ Y
**约瑟夫斯问题    都教授
+ u6 A1 m- a( U) t7 e
, U8 Z8 P4 I  M- L9 `- `我们来聊聊约瑟夫斯问题。$ m0 X: n' k6 h4 {
  O+ t, S6 C4 o( s
有n个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。
% t0 R8 g# k) H4 t
% z& ], p8 H5 e" N3 K% a7 O; e问题是,给定了n和k,一开始要站在什么地方才能避免被处决?2 b) u3 m; {& M

' h! ~" e) |5 c! _: y5 @6 Q8 t/ m% ]1 ]! K
---------------------------------------不思考的分割线---------------------------------------------
. S3 ?3 D0 R& D  u# a据说这个问题是一个经常出现在计算机算法中的问题,不过当年我读书的时候对它并没有特别注意。在计算机编程的算法中,类似问题又称为约瑟夫环。老兵和神牛肯定比我清楚得多。我就不多说什么算法了。牛教授 兵教授  ; W- g7 k7 Q8 w
9 |3 o; V' |" |8 d# F+ x8 G
---------------------------------------历史八卦的分割线----------------------------------# Z$ ]% W9 I: f5 G4 C% |2 _7 n3 k
这个问题是以弗拉维奥·约瑟夫斯命名的,他是1世纪的一名犹太历史学家。
1 n3 z8 Y+ z4 V- p, R4 Z& x* l据载,他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意。   
作者: 独角兽    时间: 2014-7-17 09:30
到处停留的叶子 发表于 2014-7-17 06:50 0 v! n$ h) a. {# |3 H6 u4 \
**约瑟夫斯问题    都教授
: S* u" g9 M, ~0 y( j. }7 @5 F
0 N, {2 ^$ A. h- I+ L  H我们来聊聊约瑟夫斯问题。
  W7 A' W" s7 j! s* O1 @1 H
1. 经过努力学习,这题我能用java编程做了,oh yeah!9 D) P9 t3 z. `% {

& i( c" f5 h* h8 J: N2. 但叶子问我的不是编程。对于给定的k,我可以用倒推法硬推。但是,想了半天也没有想到不用推的直接算法。
* v8 _. m% a3 @
4 d; w3 O* v5 h) D9 H推的方法如下:
5 O  |% l  `, ?8 w2 B# P1 s" ?$ n! @' ?$ I) }: u; t4 N
n=1,就一号,跑不掉的5 x; P- {# X' w1 P1 K' |
n=2, 要站 (k+1) 模 n 那一号设a(2),比如 k=2, 则 a2=1 (号); 若 k=3, 则 a2=2
4 T8 Z% k1 W1 x) `如此类推,n=i 时,要站在 a(i-1)+k 模 n 那一号。比如,k=6, n=19 时 要站在14号。" b5 o8 j* O) m' i; o) k
& |/ J" b! V; g: J1 D
5 ?' A. Q, i8 E+ B. K0 y
我算到k=6都找不出更直接的规律,不好玩
作者: 到处停留的叶子    时间: 2014-7-17 11:02
本帖最后由 到处停留的叶子 于 2014-7-16 22:06 编辑 . f2 v$ S. k: \" j# O0 q' A; f! l. |
独角兽 发表于 2014-7-16 20:30 + M6 v1 K$ G0 y* ]( Y9 O
1. 经过努力学习,这题我能用java编程做了,oh yeah!1 Y: y* G) o, Q8 ~+ y' T& \1 L

, D, D* L$ x! ?8 E2. 但叶子问我的不是编程。对于给定的k,我可以用 ...
6 a/ W7 H% D0 l* o. R% m
& Q. \# i+ K% N, c
兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看+ d) K- Y6 d7 a8 N) ?: \

  g8 Z/ O  |, _+ h7 G+ R# W" j在维基上看到K=2的解法和还有K≠2的通用解法,这里摘抄过来那段关于n的有趣分析。+ j4 P, V, `  t$ g  J9 k
4 _$ h4 N; K+ ?$ y7 ]$ w
还有下面我抄了两个通用算法,那个java的是不是和你做的一样啊?
' M* c( Q; }8 Z4 B7 r0 m/ ^7 U8 W& l( V* X5 g% @7 W0 T- E2 \& p) u4 l
-----------------------------不动脑筋的分割线--------------------------/ A- L  `. q' t. Y9 j4 [! Y9 m: q2 r1 R

. V9 n" d6 Y. W, k2 i, F一个小心翼翼的Java例子:
9 h' k; w1 V8 A: F0 m  x3 S. S( [$ k
int josephus(int n, int k) {- D' o8 C( C; O4 k. S+ @- R9 E
        return josephus(n, k, 1);
4 x; @) w- s( Y; y6 I  }' ]% n6 E* |1 W7 O3 m0 u& |: U1 i
  int josephus(int n, int k, int startingPoint) {) `% V4 \4 p. W+ q! y" Q5 ~1 }
      if(n == 1)
4 U! p8 _2 z) N% Y5 h          return 1;5 F0 T' T( f2 Z, z1 {* c, i
      int newSp = (startingPoint + k - 2) % n + 1;, V: Q$ ~6 e' Q0 n" R3 F
2 i& _; x2 ]- C. ?/ U
      int survivor = josephus(n - 1, k, newSp);
2 c' |' v6 A8 y& m) J% O1 ]' j      if (survivor < newSp) {8 d+ A) @5 U% x) J- K) r+ v
          return survivor;. D! u6 D" L2 J. E
      } else
; h" A: B7 P5 o1 M          return survivor + 1;
% Z  v2 }% S8 N& J$ \& P0 C  }
  c4 P; z3 z8 W+ g
& ]+ G: c/ p4 W, g4 Y! d8 N  Y另外有个更简洁的例子/ g/ t" ?& N6 i# I+ F( I: L
  def josephus(n, k):; @/ i( K+ I' |( E8 I
    if n ==1:9 {% h" ]' i+ c  f
      return 1
5 Z4 x2 M5 B  }3 m( G+ u+ P    else:. O3 R8 f6 N2 [. ?7 v% O
      return ((josephus(n-1,k)+k-1) % n)+1: A/ y0 L% l" m- o6 ^' p, [
' I* D7 o9 r/ C' }
(如果n这个数字很大很大,k很小很小,电脑会不会转晕过去呢?)' G' e& Z2 t5 U; u  X. x

7 Z; a# ~$ D% A* z) F: g+ L* C以上摘自 http://en.wikipedia.org/wiki/Josephus_problem#Solution3 J, g. j4 r, ~) d1 Q1 U

4 @8 N* Y1 F* L0 r% {7 q3 F% F  \  t4 t+ P1 J6 R8 ^! g6 E# l0 @7 @( W
关于n的分析:
  @! V! T' [. h: i. r, v1 H设f(n)为一开始有n个人时,生还者的位置。
3 |% [4 n  i" D如果一开始有偶数个人,则第二圈时位置为x的人一开始在第2x - 1个位置。因此位置为f(2n)的人开始时的位置为2f(n) - 1。这便给出了以下的递推公式:
+ |: S0 p4 d4 [7 b) Y" v; l8 l( D9 d+ H6 H( o7 }
f(2n)=2f(n)-1
5 F2 {/ \$ i* [( I如果一开始有奇数个人,则走了一圈以后,最终是号码为1的人被杀。于是同样地,再走第二圈时,新的第二、第四、……个人被杀,等等。在这种情况下,位置为x的人原先位置为2x+1。这便给出了以下的递推公式:; `' c( ~! A; a

/ I0 Z# m4 L: d9 L3 B: Vf(2n+1)=2f(n)+1. V! h9 A* i$ s
. ]6 g, N+ B' q! W9 y$ i4 L/ m) x
$ g- w6 v- [4 r$ ?& C2 h$ F
如果我们把n和f(n)的值列成表,我们可以看出一个规律:
- R3 S/ N. i" x
* J8 V* M$ m/ K' c$ W1 m+ tn    1    2        3        4        5        6        7        8        9        10        11        12        13        14        15    169 l) S) q9 o  ^4 f  }! S% l& _
f(n) 1    1        3        1        3        5        7        1        3        5        7        9        11        13        15        1
2 o7 v, \% K7 G. n% n) P' f5 P0 `) a5 R* m
从中可以看出,f(n)是一个递增的奇数数列,每当n是2的幂时,便重新从f(n)=1开始。因此,如果我们选择m和l,使得n=2^m+l且0≤ l<2^m,那么f(n)=2 . l+1。显然,表格中的值满足这个方程。可以用数学归纳法给出一个证明。
0 n+ S/ \3 K  F6 C/ w
; j1 ^  u; B6 ^8 S/ t定理:如果n=2^m+l且0≤ l<2^m,则f(n) = 2.l+1。* ~& V& u# j& y% K/ G" G$ ^
( F# g8 P( m! M/ {1 r
3 p, T4 \! I+ j5 j
答案的最漂亮的形式,与n的二进制表示有关:把n的第一位移动到最后,便得到f(n)。这可以通过把n表示为2^m+l来证明。
作者: 独角兽    时间: 2014-7-17 11:19
到处停留的叶子 发表于 2014-7-17 11:02
9 J0 ^, ?$ P. X7 o; Y% N兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看
! ^- @' _4 x( c/ [" c6 d+ V; E& d; l
6 z3 `( Q, A' u2 C在 ...

& B3 U) E! X: g  k) X! p. z1 Y3 ?我的推法就是这个:" _9 J8 g' c: Z& |: E: R$ z

1 z) k) s5 N4 H/ \& h  return ((josephus(n-1,k)+k-1) % n)+1" K% u9 ^5 I. ?% W

3 K. p% P) B' c" h/ a& N. o我有一点疏忽是如果整除,模的结果是0,但实际应该取n。所以这个表达式把 "+1"搞到括号外面就完全对了。
# y2 W7 E  X# ^5 o  l, B( _+ S0 T. {. y2 i. M, |0 c* n7 K% _. x
2的情况我没单拿出来搞。
作者: leekai    时间: 2014-7-18 09:47
绕死了
作者: 常挨揍    时间: 2014-7-18 22:40
看不懂( p) |5 Q; [8 e4 F0 L6 K
不过今天不幸运数是17
作者: 到处停留的叶子    时间: 2014-7-19 03:04
常挨揍 发表于 2014-7-18 09:40
# l: W2 e! d, s9 R+ I3 \" c看不懂
6 l* F2 @- y! Z% e  E- U! p; T1 C2 e不过今天不幸运数是17
3 y0 i+ w1 ?) V. T+ j! ~
7月17日成了一个黑色的日子。很让人感觉生命无常。
+ k3 Y& E% V, W& P6 i9 G- C" V) s
+ ~+ M* q- q" G2 `+ B0 n* Z( `9 {以后出行挑日子,要找一个幸运数的交集,这里前面的9个数字也可以参考一下:1,3,7,9,13,15,21,25,31
+ k+ e# M9 e7 b/ X5 Q& q4 X& q' V# i! E9 F- z0 d# |
13号如果遇上星期五,还是算了,不要不信邪。




欢迎光临 爱吱声 (http://129.226.69.186/bbs/) Powered by Discuz! X3.2