爱吱声

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

作者: 到处停留的叶子    时间: 2014-7-16 11:30
标题: 小小的停留之四 幸运数
上次说到  小小的停留之三 “计算机之父” 天才的数学家冯·诺伊曼; O! a8 T9 F! N
看冯·诺伊曼的故事,他有句名言:“若人们不相信数学简单,只因他们未意识到生命之复杂。”
1 A# L' z& ?. l  {) B! B! b( ]7 a2 M6 Q# o) t6 m8 f) e& v5 p# M
他有个好朋友,据说是最好的朋友,是生于匈牙利的波兰犹太人数学家乌拉姆,这位先生曾参与曼克顿计划(核武器上有Teller-Ulam design,Teller指爱德华·泰勒)。他亦有参与研究核能推动的航天飞机。在纯数学上,遍历理论、数论、集合论和代数拓扑都有他的足迹。
$ g# M5 H& o0 ?$ x/ j+ w' N$ _+ ^2 V  N1 \! T7 L' J+ M
所以我在这里要说的幸运数不是中餐馆的饼干里给你的数字,也不是买彩票开奖的数字,而是在1955年波兰数学家乌拉姆提出的一个自然数列,用类似埃拉托斯特尼筛法的算法后留下的整数集合。' R$ n0 `/ W% z" K

" v. O9 b; R$ {: }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.
3 j9 a* \# [8 Y/ c7 {/ o" s
' a; a( a$ H- n6 p- N- q! d' x幸运数的定义
+ ^, i% f4 i6 vFORMULA       
: p% |; h, J& _" t; sStart 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 E0 l8 p4 K% u- o9 K

( D) T8 V# \- u, {7 ?9 D具体一点来说说幸运数列怎么筛选出来的(喜欢数论的同学一定知道挑选素数的埃拉托斯特尼筛法,这个办法是类似的)" Y+ i' ]6 ?0 `& E
3 ^3 l* u$ D! M7 g
初始,从1开始的自然数列:
" [/ t6 S3 F! |- v2 ?0 t+ n$ ]Begin with a list of integers starting with 1:
" L6 w  N5 H0 \2 @6 V$ l1        2        3        4        5        6        7        8        9        10        11        12        13        14        15        16        17        18        19        20        21        22        23        24        25  ……# `7 g9 G+ J6 Q3 x% l  }. E

3 Z( l& g0 b6 b( E( L1 r( O9 U开始删除,在这个数列里,从2开始,首先是每隔2个数字,删除第二个数字。剩下来的数字是奇数~~7 B, @# \6 t# d- L+ s; S/ w' M6 v
剩下的数列如下:+ t2 a. M/ [8 Z  p9 P3 ?
Every second number (all even numbers) is eliminated, leaving only the odd integers:
9 g5 O( q7 P# e8 F0 i/ z, K0 M1                3                5                7                9                11                13                15                17                19                21                23                25  ……
' Z6 v: z/ `0 ?  [0 y- t/ c* X/ ~4 y" D/ X# s
接下来是3,每隔3个数字删除第三个。剩下的数列如下:
  d: K1 a- F; z2 C9 \& D$ R& kThe second term in this sequence is 3. Every third number which remains in the list is eliminated:
& u' v+ F/ {1 B# I7 D3 m0 t, J1                3                                7                9                                13                15                                19                21                                25  ……8 E$ B* d$ L; t+ i* T6 Y

4 k7 T* u% a- @! M, `* y现在接下来的数字是7,所以把上述数列中每第七个删除,剩下的数列是:
/ K% N: h  z" ~The next surviving number is now 7, so every seventh number that remains is eliminated:
6 b& k3 Z3 J4 r6 j1                3                                7                9                                13                15                                                21                                25  ……
6 ^' U9 D* ^& z9 A$ K
7 M, p5 I* ^: s! p! b9 ?- u接下来是9,……- P) x( H4 J* Y. _6 O
这个过程可以一直无限继续下去,被幸运地留下来的数字就是幸运数。* d# l- e" l/ V* a; n

) ~- ~- A# U+ Q5 ~* h2 L' \# ~. N1, 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).9 s! ~3 j) [% a7 S
在OEIS编号为A000959的数列就是Lucky numbers
6 `- k. t9 t, [$ i& ?& _. m2 d" }上述链接给了一个稍微长一点的幸运数列:% b9 M$ m1 o7 R# T3 R+ v/ J9 Z
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 ……% \! m. z& f4 e% a# P% f9 ]

8 z/ K3 J5 J) w有没有同样喜欢看数字的同学告诉我,你看了这个数列发现的是什么呢?7 v+ m' w$ P1 r& f& W2 }, c

! o) P3 `, E% p! \6 S
2 v8 u' ]* Y: v9 ^, `6 |& J" o. I) i1 v( L; z2 r) R- C2 q
第一个短一点的数列,我发现,1,3,5,7的平方(1,9,25,49)都是幸运数,但9的平方81就不是,于是马上想,那么是不是只有奇素数的平方才是幸运数呢?答案是不,11的平方也不是。于是叶子的第一个猜想就在几秒里被叶子证明是错误的。
9 d2 L5 q' w1 f' Y% D1 Z
& r. c( h0 a$ {; l$ R+ [数论里的各种数列是数学里最容易上手理解的,不过最迷人最折磨人的也是它。著名的例子就是哥德巴赫猜想(Goldbach's conjecture)。& z# V$ `5 F5 \5 Z
幸运数的挑选过程,类似上面提到过的埃拉托斯特尼筛法挑选素数的过程,同时也和这个著名猜想有关。. ], a- R3 g  n* \: P/ v& H" W
另外幸运数也曾经在正式进入书面讨论的时候被建议叫做 "the sieve of Josephus Flavius",因为它的挑选让大家想到著名的约瑟夫斯问题。* l& ~4 o' h, j/ `/ D% X0 a
5 x$ K$ B% L4 |! v: X! D# b" `
暂时就到这里吧,接下去要不要继续聊引出来的概念和问题呢?
0 t3 q+ p3 p3 |8 \+ f0 R9 \/ T' Q# u2 l: [: ~% }" F/ Y
**什么叫做Conjecture?# m! e4 s- Q& f6 ]# D
**约瑟夫斯问题。
作者: 到处停留的叶子    时间: 2014-7-16 21:26
猜想(conjecture)和假说(Hypothesis)
/ }  d4 h8 y  Y3 b
" u5 l7 z2 q& r猜想(conjecture)是一个看上去是真的,但尚未被证明的叙述。比如说上面提到的数学数列,因为它表现的没有规律和无限性,基于观察的某些结论,如果不能用科学逻辑的方法来证明在无限的未来它都是真的,那么之前所观察到的所有事实都仅仅是看上去是正确的。
7 q0 o: J! {0 r* }
/ I% L8 n( n- w' S) I. [  e6 Y当猜想被证明后,它便会成为定理。猜想一日未成为定理,数学家都要小心在逻辑结构之中使用这些猜想。- A- }& [9 v4 l4 h' o
3 E4 |! g0 ~% O5 W/ C+ F, w7 X% M2 a
猜想主要因为类比推理和偶然发现的巧合而出现。数学家通常会使用不完全归纳法,来测试自己的猜想。例如费马曾经根据首四个费马数是素数,便猜想所有费马数都是素数(此猜想已被推翻)
; a; j7 |, W2 B- l# d: R6 m0 Y: d) G/ f. ]2 ^! t- ?
假说(Hypothesis),即指按照预先设定,对某种现象进行的解释,即根据已知的科学事实和科学原理,对所研究的自然现象及其规律性提出的推测和说明,而且数据经过详细的分类、归纳与分析,得到一个暂时性但是可以被接受的解释。任何一种科学理论在未得到实验确证之前表现为假设学说或假说。$ V" [: }8 ?) ^8 o: W+ c
; M2 [2 q5 U) B* _0 i
有的假设还没有完全被科学方法所证明,也没有被任何一种科学方法所否定,但能够产生深远的影响。如1900年德国物理学家马克斯·普朗克为解决黑体辐射谱而首先提出量子论(量子假说)。
作者: 农民家的狗    时间: 2014-7-16 21:58
不明觉厉
作者: 到处停留的叶子    时间: 2014-7-17 06:50
本帖最后由 到处停留的叶子 于 2014-7-16 17:53 编辑
- T5 Z; F2 u% P; V
$ V! k3 [4 c/ H6 V**约瑟夫斯问题    都教授 * ^  ^7 p5 C0 \& b! R9 N

' ]% W7 J  L: Y; L我们来聊聊约瑟夫斯问题。
; _* ^+ q- E/ l6 r& R6 g, n& q9 U1 E7 F, i0 B4 P$ x1 @8 x1 q
有n个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。
: s5 _1 P! f: S% o2 `5 C; O) c; u
. _8 n! L8 |  J问题是,给定了n和k,一开始要站在什么地方才能避免被处决?
2 H+ p' z8 r' `1 V/ @) V, v9 P! c- ?( y; k! Z

( w* \$ c+ ^  V, r---------------------------------------不思考的分割线---------------------------------------------
: s  y( d9 h; o; ^2 N据说这个问题是一个经常出现在计算机算法中的问题,不过当年我读书的时候对它并没有特别注意。在计算机编程的算法中,类似问题又称为约瑟夫环。老兵和神牛肯定比我清楚得多。我就不多说什么算法了。牛教授 兵教授  
+ {% V  ]! Q! G$ t' ?/ E  a! S) K7 I6 M0 C. X
---------------------------------------历史八卦的分割线----------------------------------
4 k$ C+ M2 P# t这个问题是以弗拉维奥·约瑟夫斯命名的,他是1世纪的一名犹太历史学家。4 f1 [- s4 `8 B& ]
据载,他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意。   
作者: 独角兽    时间: 2014-7-17 09:30
到处停留的叶子 发表于 2014-7-17 06:50 5 T! a5 J: ^2 t, x
**约瑟夫斯问题    都教授
4 F6 g1 N6 y- l& @
1 x- ^! H) f+ b! M7 a我们来聊聊约瑟夫斯问题。
1 Q/ d" s, g& i+ z
1. 经过努力学习,这题我能用java编程做了,oh yeah!
% i+ s- g+ P( e5 c$ u) K) e: r+ I  y) S; P/ c: B, [
2. 但叶子问我的不是编程。对于给定的k,我可以用倒推法硬推。但是,想了半天也没有想到不用推的直接算法。
1 `3 e' X+ [+ @/ L  }. D
) K+ N! p7 e9 x6 K8 ?& o推的方法如下:, n% H6 A- n; w& V7 M( V7 t

8 c3 ^) V) f7 @! ^8 e$ D+ _# wn=1,就一号,跑不掉的/ b( v$ j) V/ `# O/ Z
n=2, 要站 (k+1) 模 n 那一号设a(2),比如 k=2, 则 a2=1 (号); 若 k=3, 则 a2=2
4 K$ }. u. H9 X如此类推,n=i 时,要站在 a(i-1)+k 模 n 那一号。比如,k=6, n=19 时 要站在14号。
2 U1 }- ?  `* Y7 T0 T0 t6 [
3 b5 V" S. I. P8 J7 l3 {( P/ V5 w5 p
5 Y0 Y4 Y% {1 A* J; b8 r$ ?我算到k=6都找不出更直接的规律,不好玩
作者: 到处停留的叶子    时间: 2014-7-17 11:02
本帖最后由 到处停留的叶子 于 2014-7-16 22:06 编辑 3 d( M0 s" z& _7 R9 L# h
独角兽 发表于 2014-7-16 20:30 * l2 H& j$ u; z6 H/ X+ g) I
1. 经过努力学习,这题我能用java编程做了,oh yeah!
: s: a9 U; M2 Z: P4 H& O# t6 L8 L' d: q
2. 但叶子问我的不是编程。对于给定的k,我可以用 ...
' D3 h6 N  D( \7 P: W& f6 t
9 p& h* R: q& D5 T
兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看
( M! a; ^7 j. m& E
- n$ B+ {& _- h在维基上看到K=2的解法和还有K≠2的通用解法,这里摘抄过来那段关于n的有趣分析。* F  \9 |2 s/ }- c

- Z  U8 h6 f2 d* z9 ^还有下面我抄了两个通用算法,那个java的是不是和你做的一样啊?
3 N& i% h$ B: |4 T1 v, `" N0 D# U3 t: {# P3 [
-----------------------------不动脑筋的分割线--------------------------
- j8 J6 e: ?& X5 ?: F2 h0 p. ]- @* V; f
一个小心翼翼的Java例子:9 v7 A2 o$ v: p2 S

9 b" T- T" u4 z* g6 P7 w/ C int josephus(int n, int k) {% A5 a" \6 E( X$ ~/ s
        return josephus(n, k, 1);
4 C+ V' [* u0 K  }
5 {% S' z! e& E$ }2 c/ d  int josephus(int n, int k, int startingPoint) {. p2 A2 e2 r- E( I* y& l% o$ A
      if(n == 1)
, H4 L1 j6 E1 u" Z          return 1;
8 a7 }1 B( s) M: s* ^2 b' D3 G& e      int newSp = (startingPoint + k - 2) % n + 1;$ g$ l- O- W# m# O% q% s4 U

  I. y6 ~4 L3 w* W      int survivor = josephus(n - 1, k, newSp);$ t* u7 L* K. j7 r, g0 ?
      if (survivor < newSp) {' f3 o5 T4 i# U0 @! F, H
          return survivor;
- i5 s' e4 N: `  [. Q% P      } else2 {2 j) z6 o0 C5 l2 m+ n
          return survivor + 1;
0 K3 x/ m' i5 v( i# L$ |! V  }$ q% e+ f6 i  z/ k! q, G7 R: b
6 x) o- M3 v: i' ?/ l& U5 e
另外有个更简洁的例子
1 B* t& j' R. t+ R2 u  def josephus(n, k):
' ?3 W/ N) R7 F" p8 m    if n ==1:
* o" @+ L  G8 ?4 z( {" T# I      return 10 f3 s- C+ z! Z& N- p2 K( _, c
    else:
; E- q) N. T! f: j  d; H      return ((josephus(n-1,k)+k-1) % n)+1; L8 j( o' D! R2 K  C8 I4 F

: H2 _; P5 F+ V(如果n这个数字很大很大,k很小很小,电脑会不会转晕过去呢?)
, b( S$ z% ~4 J) v: j) n. C1 A2 b% P6 Z$ \1 j6 _% {
以上摘自 http://en.wikipedia.org/wiki/Josephus_problem#Solution( S( G. R6 M* c+ R3 j; N
* W0 v, Y" J! z. M8 m+ D. g

7 R1 ~: y  E9 [$ h7 g- e0 n: D# m关于n的分析:0 r6 o( z$ w+ H% w( a9 J
设f(n)为一开始有n个人时,生还者的位置。4 x% p7 k) i8 ~  U
如果一开始有偶数个人,则第二圈时位置为x的人一开始在第2x - 1个位置。因此位置为f(2n)的人开始时的位置为2f(n) - 1。这便给出了以下的递推公式:
7 P5 L7 `! |) g; |* R
3 |' b. b- G- x8 J. @2 B* `0 Gf(2n)=2f(n)-1# H( s- b, A/ g) P  y
如果一开始有奇数个人,则走了一圈以后,最终是号码为1的人被杀。于是同样地,再走第二圈时,新的第二、第四、……个人被杀,等等。在这种情况下,位置为x的人原先位置为2x+1。这便给出了以下的递推公式:( ~: q/ r9 b# W
6 j- H' s3 Q/ k1 \  E! I& X0 b, d/ \
f(2n+1)=2f(n)+1
0 l' R2 ^* F% f$ x* U) f5 V( Y2 u. s$ M6 J, |  H

1 @6 {  @/ \$ ?8 s% b# L, c# D7 y如果我们把n和f(n)的值列成表,我们可以看出一个规律:$ ~, Z: ?7 P# f- D  Y( W$ o
* _* v3 p/ f* _/ P0 T$ R$ Q
n    1    2        3        4        5        6        7        8        9        10        11        12        13        14        15    16# J9 L1 e/ u% S& Q7 A) q
f(n) 1    1        3        1        3        5        7        1        3        5        7        9        11        13        15        1
! r# P  l; A( s3 G  s( f) L. l( l) f0 o8 f) }
从中可以看出,f(n)是一个递增的奇数数列,每当n是2的幂时,便重新从f(n)=1开始。因此,如果我们选择m和l,使得n=2^m+l且0≤ l<2^m,那么f(n)=2 . l+1。显然,表格中的值满足这个方程。可以用数学归纳法给出一个证明。( ]3 B& \. y  C# C! @: A& n" H& O

1 ?3 q. _3 a. \. F, e! I定理:如果n=2^m+l且0≤ l<2^m,则f(n) = 2.l+1。
1 U( W5 R$ a' s) r. f3 ^( G. w% F3 I
/ W7 s3 b5 @7 Z6 C' G2 v
答案的最漂亮的形式,与n的二进制表示有关:把n的第一位移动到最后,便得到f(n)。这可以通过把n表示为2^m+l来证明。
作者: 独角兽    时间: 2014-7-17 11:19
到处停留的叶子 发表于 2014-7-17 11:02 % Q& A3 y0 Q: c8 n( Z% V' w
兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看. B$ B, }* I4 T/ m3 B  E8 k
9 U$ p5 b9 d  D& V+ ?4 D  s1 _
在 ...

* O$ Z! f: w# p) ~4 {% v& d我的推法就是这个:
4 ^& X* x2 b/ {  @
! w; s: X: g8 h3 i+ X" R: G  return ((josephus(n-1,k)+k-1) % n)+16 C' ~- [7 {; W9 t$ z" s
6 v- j, D2 E* Q' J( F/ h* e) i
我有一点疏忽是如果整除,模的结果是0,但实际应该取n。所以这个表达式把 "+1"搞到括号外面就完全对了。0 U6 R! A. y" x( r+ [  p2 D, m
+ }% D$ T% u- z8 T! S, L
2的情况我没单拿出来搞。
作者: leekai    时间: 2014-7-18 09:47
绕死了
作者: 常挨揍    时间: 2014-7-18 22:40
看不懂
( S- ~" @7 S7 Q$ q不过今天不幸运数是17
作者: 到处停留的叶子    时间: 2014-7-19 03:04
常挨揍 发表于 2014-7-18 09:40 . h" g4 i+ j2 ^% s$ @& J& y; m
看不懂
4 [: y2 v1 I' L, u, |不过今天不幸运数是17

+ {1 L& u( H; h3 @7月17日成了一个黑色的日子。很让人感觉生命无常。; s- G2 y# ]' I/ Q3 X' _
, Y( S# T. }: |  k& e: e$ o; h+ e) h
以后出行挑日子,要找一个幸运数的交集,这里前面的9个数字也可以参考一下:1,3,7,9,13,15,21,25,31
! `4 ~8 N$ c4 R! G' o7 E3 y. P$ S. ^6 f
13号如果遇上星期五,还是算了,不要不信邪。




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