设为首页收藏本站

爱吱声

 找回密码
 注册
搜索
查看: 4787|回复: 9
打印 上一主题 下一主题

[科教沙龙] 小小的停留之四 幸运数

[复制链接]
  • TA的每日心情
    擦汗
    2020-3-23 00:29
  • 签到天数: 134 天

    [LV.7]分神

    跳转到指定楼层
    楼主
    发表于 2014-7-16 11:30:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    上次说到  小小的停留之三 “计算机之父” 天才的数学家冯·诺伊曼
    7 I* Q) k4 O9 |' c! l& H看冯·诺伊曼的故事,他有句名言:“若人们不相信数学简单,只因他们未意识到生命之复杂。”- A( _0 v4 N) k4 V1 B1 _5 g
    . L4 ]/ m/ Q1 E7 H9 n# t7 ^1 |
    他有个好朋友,据说是最好的朋友,是生于匈牙利的波兰犹太人数学家乌拉姆,这位先生曾参与曼克顿计划(核武器上有Teller-Ulam design,Teller指爱德华·泰勒)。他亦有参与研究核能推动的航天飞机。在纯数学上,遍历理论、数论、集合论和代数拓扑都有他的足迹。
    , t1 u, E; k8 P, r9 I7 S# \) G" Z( D: }
    所以我在这里要说的幸运数不是中餐馆的饼干里给你的数字,也不是买彩票开奖的数字,而是在1955年波兰数学家乌拉姆提出的一个自然数列,用类似埃拉托斯特尼筛法的算法后留下的整数集合。
    3 f* `( q$ C7 U, H- Z* o4 \  o3 A) F* _. e# h# N% m6 U+ n
    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.
    # \" R  ?' z4 N1 x" a# R% m: c+ D2 a- j" O' e: z9 Z+ z
    幸运数的定义) l, ?: D& d6 S+ X' k
    FORMULA        $ g7 a& u5 `6 G! J4 c. o! M. h
    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.) S: r! l9 T5 K8 U8 A) }

    , F, ?; ~8 Q) b具体一点来说说幸运数列怎么筛选出来的(喜欢数论的同学一定知道挑选素数的埃拉托斯特尼筛法,这个办法是类似的)* ?" b  Z  o4 P1 A
    + I! o2 u4 s6 p0 T
    初始,从1开始的自然数列:
    - [" F& e+ ]6 ?* G8 @% L' YBegin with a list of integers starting with 1:
    . }  C: }9 J9 \1 N! 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  ……: T& f3 B) s3 L* b, {% ?

    # X: k; b! Y/ t; j) d% z; p开始删除,在这个数列里,从2开始,首先是每隔2个数字,删除第二个数字。剩下来的数字是奇数~~0 n" C% M3 _% J, \' O# W- S
    剩下的数列如下:
    6 @( `) x2 r& {& _. @. [. S/ V9 E0 TEvery second number (all even numbers) is eliminated, leaving only the odd integers:
    " W: ^: ?: l9 x3 I; E& L1                3                5                7                9                11                13                15                17                19                21                23                25  ……' G, x$ @1 F' _9 E  Z

      G: X: ?  j1 k; t, \7 G接下来是3,每隔3个数字删除第三个。剩下的数列如下:
    ' A' l; a6 y: V. K  oThe second term in this sequence is 3. Every third number which remains in the list is eliminated:
    % Q, p7 g- c6 a9 l1                3                                7                9                                13                15                                19                21                                25  ……
    8 B5 W$ p: d7 ^. W" T  c- H  ]
    现在接下来的数字是7,所以把上述数列中每第七个删除,剩下的数列是:
    + Q' `( t8 j7 p, s3 i& W8 \The next surviving number is now 7, so every seventh number that remains is eliminated:" I( G! D' w" S* q) M7 m" g
    1                3                                7                9                                13                15                                                21                                25  ……- A  Q* s; J* \! \& A

    9 s1 T  w3 v9 p2 i" P* G接下来是9,……
    ( u5 g2 I) A8 R# G) y0 @1 J这个过程可以一直无限继续下去,被幸运地留下来的数字就是幸运数。2 A$ K1 F: f; N' i+ K. Q

    # o- d6 \- E9 z2 R- b. M# w) g1, 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)., \! O: E) A& d* _9 _. F9 \
    在OEIS编号为A000959的数列就是Lucky numbers* a; J( H# j/ H3 J' z$ c; q- r
    上述链接给了一个稍微长一点的幸运数列:5 F# q" z  m7 O$ R/ A7 m
    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 ……& T( u9 J: p5 @2 L

    7 j+ k' U2 d7 Q; i! U" k/ y有没有同样喜欢看数字的同学告诉我,你看了这个数列发现的是什么呢?0 C$ @% l$ H; E3 m4 g4 y* f

    9 t. {  t6 o2 e  W( N% q
    ) j' p4 k9 v/ w+ ]) p+ x
    # P; ^; g8 I( f/ K1 C% u第一个短一点的数列,我发现,1,3,5,7的平方(1,9,25,49)都是幸运数,但9的平方81就不是,于是马上想,那么是不是只有奇素数的平方才是幸运数呢?答案是不,11的平方也不是。于是叶子的第一个猜想就在几秒里被叶子证明是错误的。8 z) u% L% Y9 U2 m/ ]
      ^; G% i3 `* e6 a6 U7 ]2 a3 ~1 Y
    数论里的各种数列是数学里最容易上手理解的,不过最迷人最折磨人的也是它。著名的例子就是哥德巴赫猜想(Goldbach's conjecture)。7 l& N+ t. d% b2 ~2 J. \
    幸运数的挑选过程,类似上面提到过的埃拉托斯特尼筛法挑选素数的过程,同时也和这个著名猜想有关。
    # t& P7 V9 y0 o( ~另外幸运数也曾经在正式进入书面讨论的时候被建议叫做 "the sieve of Josephus Flavius",因为它的挑选让大家想到著名的约瑟夫斯问题。
    8 G( c  f* @7 x: N* ]- B6 W& t
    # L3 Y/ W$ G& B' g暂时就到这里吧,接下去要不要继续聊引出来的概念和问题呢?
    9 ?) P" F- Z9 U' C" S! A1 z5 p7 N# [- X3 W; ~
    **什么叫做Conjecture?
    $ w$ k# [# m1 i/ m9 A0 f3 M/ L- \**约瑟夫斯问题。

    评分

    参与人数 9爱元 +49 收起 理由
    韦红雪 + 8
    喜欢就捧捧场 + 6 涨姿势
    独角兽 + 4 涨姿势
    Pipilu + 2 涨姿势
    农民家的狗 + 4

    查看全部评分

  • TA的每日心情
    擦汗
    2020-3-23 00:29
  • 签到天数: 134 天

    [LV.7]分神

    沙发
     楼主| 发表于 2014-7-16 21:26:40 | 只看该作者
    猜想(conjecture)和假说(Hypothesis)7 [- I: t% h  c. T" w4 u& s

    6 c7 c' @# P' y, M9 ]猜想(conjecture)是一个看上去是真的,但尚未被证明的叙述。比如说上面提到的数学数列,因为它表现的没有规律和无限性,基于观察的某些结论,如果不能用科学逻辑的方法来证明在无限的未来它都是真的,那么之前所观察到的所有事实都仅仅是看上去是正确的。
    : @. b, A0 ?& M) Q6 ^& h
    ; X; o! L! A/ G6 p当猜想被证明后,它便会成为定理。猜想一日未成为定理,数学家都要小心在逻辑结构之中使用这些猜想。6 J, |9 I* t! k/ {; I+ b

    * ^+ \1 o! U. H猜想主要因为类比推理和偶然发现的巧合而出现。数学家通常会使用不完全归纳法,来测试自己的猜想。例如费马曾经根据首四个费马数是素数,便猜想所有费马数都是素数(此猜想已被推翻)# c* Q& r0 x- P6 h$ j/ Y

    & @+ a  x5 u/ N) T0 N6 V假说(Hypothesis),即指按照预先设定,对某种现象进行的解释,即根据已知的科学事实和科学原理,对所研究的自然现象及其规律性提出的推测和说明,而且数据经过详细的分类、归纳与分析,得到一个暂时性但是可以被接受的解释。任何一种科学理论在未得到实验确证之前表现为假设学说或假说。
    * \/ {3 P# e( A9 P  R
    " A& @- G  [/ \7 l$ F0 @有的假设还没有完全被科学方法所证明,也没有被任何一种科学方法所否定,但能够产生深远的影响。如1900年德国物理学家马克斯·普朗克为解决黑体辐射谱而首先提出量子论(量子假说)。

    评分

    参与人数 1爱元 +4 收起 理由
    独角兽 + 4 涨姿势

    查看全部评分

  • TA的每日心情
    慵懒
    2018-2-25 20:16
  • 签到天数: 128 天

    [LV.7]分神

    板凳
    发表于 2014-7-16 21:58:32 | 只看该作者
    不明觉厉

    点评

    你是先入为主地封闭了自己的思考。这个数列的筛选规则,只要会数数都能看懂的吧??  发表于 2014-7-17 06:46
  • TA的每日心情
    擦汗
    2020-3-23 00:29
  • 签到天数: 134 天

    [LV.7]分神

    地板
     楼主| 发表于 2014-7-17 06:50:45 | 只看该作者
    本帖最后由 到处停留的叶子 于 2014-7-16 17:53 编辑
    * B  d7 M8 d. ~! ?* O2 i
    8 L( T: L0 s& _4 g4 U' x2 L" r. [**约瑟夫斯问题    都教授 ; V  U( p; ?. O: d
    5 R; J5 q+ G3 H. X& s
    我们来聊聊约瑟夫斯问题。0 E3 M4 j6 O( j: t/ K- [6 x1 M  @

    + f+ e6 W% `  ~( M' N6 E2 V有n个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。. |- g& h& B0 H
    : P* u/ }/ R# v" A2 i: Y1 c. G0 P
    问题是,给定了n和k,一开始要站在什么地方才能避免被处决?
    - W2 z; b  ]- V8 t+ y: l- L& C- y" ^& A; U$ I3 D/ |* s
    & p. `- v+ y( ~' T$ n3 K
    ---------------------------------------不思考的分割线---------------------------------------------
    ( o6 u, L+ K* k. }" P据说这个问题是一个经常出现在计算机算法中的问题,不过当年我读书的时候对它并没有特别注意。在计算机编程的算法中,类似问题又称为约瑟夫环。老兵和神牛肯定比我清楚得多。我就不多说什么算法了。牛教授 兵教授  + F) R3 A: T4 h) p3 `+ x

    3 {8 T# j3 M; L5 K---------------------------------------历史八卦的分割线----------------------------------1 |+ q: Y) h% ]! {3 a# v' Y
    这个问题是以弗拉维奥·约瑟夫斯命名的,他是1世纪的一名犹太历史学家。
    7 @, r; i% r% m( ^, A3 `据载,他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意。   

    该用户从未签到

    5#
    发表于 2014-7-17 09:30:00 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 06:50   \3 V2 R/ m  n5 y) ~) F1 S
    **约瑟夫斯问题    都教授 4 t$ d+ ^% l/ {+ U* ~

    1 E" t* e" s" V% I1 t我们来聊聊约瑟夫斯问题。
    ; T! m4 z- ?# T9 C/ j
    1. 经过努力学习,这题我能用java编程做了,oh yeah!
    , W" C1 d  B% m4 h& Y- E, N& f6 p% h" B9 c6 O
    2. 但叶子问我的不是编程。对于给定的k,我可以用倒推法硬推。但是,想了半天也没有想到不用推的直接算法。
    4 L! u- K* z: Q( G5 s- t
    7 v9 N% u* F/ E4 b" W' u5 G推的方法如下:
    $ j, l3 q$ m: x# |6 B+ |
    8 A! W2 |) G. j/ }3 g, Tn=1,就一号,跑不掉的6 N9 z0 g+ X# G5 Q/ x3 L. j  t
    n=2, 要站 (k+1) 模 n 那一号设a(2),比如 k=2, 则 a2=1 (号); 若 k=3, 则 a2=2 6 K+ U+ w. G' o: o# I% {5 U/ g) `
    如此类推,n=i 时,要站在 a(i-1)+k 模 n 那一号。比如,k=6, n=19 时 要站在14号。* E  [3 e; t: L- k' P

    * Z. |! B# B( H9 b% E# B- W" P+ N$ n2 Y4 m$ T
    我算到k=6都找不出更直接的规律,不好玩

    评分

    参与人数 1爱元 +6 收起 理由
    到处停留的叶子 + 6 哇!!!

    查看全部评分

  • TA的每日心情
    擦汗
    2020-3-23 00:29
  • 签到天数: 134 天

    [LV.7]分神

    6#
     楼主| 发表于 2014-7-17 11:02:58 | 只看该作者
    本帖最后由 到处停留的叶子 于 2014-7-16 22:06 编辑 5 T% m, x$ M% g5 ^1 K
    独角兽 发表于 2014-7-16 20:30
    $ T& C+ B" q' K% r! r+ c( L( {1. 经过努力学习,这题我能用java编程做了,oh yeah!
    & ?% x  _) j* P1 O
    . R4 b! O0 I) w0 X4 `1 H2. 但叶子问我的不是编程。对于给定的k,我可以用 ...

    8 t4 ?  w5 B: \- P/ e, J6 D" ?+ V$ j) K1 `) y" O9 b
    兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看! {2 ]2 \1 r; [5 C$ ?( M+ [
    & z, o. u7 Y& R4 p
    在维基上看到K=2的解法和还有K≠2的通用解法,这里摘抄过来那段关于n的有趣分析。
    2 u- K4 C3 S% ~8 F7 }2 g5 U. ?: `" [
    % z* ]* M6 J7 k4 i) A- q还有下面我抄了两个通用算法,那个java的是不是和你做的一样啊?$ U8 A, B* b2 `- W
    : M; I8 `8 g( A4 a, d- q
    -----------------------------不动脑筋的分割线--------------------------7 O6 j+ B9 A2 q! }6 H
    ) m, p( ?2 n0 z! r$ s- X
    一个小心翼翼的Java例子:/ I' v. s7 V  }5 g" G8 T/ V
    / s, J2 \1 S! N+ `9 O' p& [5 N  X$ C
    int josephus(int n, int k) {
    ( O/ S: K/ W  u/ P7 _$ m        return josephus(n, k, 1);5 K+ e. J; |0 X. e) u
      }
    . g# @; m% o( s/ r; ^4 E$ y' E  int josephus(int n, int k, int startingPoint) {/ ~9 r  W# D; `* c" r5 Z3 w/ r: x$ ?" Z
          if(n == 1)
    ( i9 b& k& ?7 V( E& P7 W( G/ o          return 1;
    # d4 f9 w/ ?) S2 j* C. L, @      int newSp = (startingPoint + k - 2) % n + 1;
    6 G$ `: C& U6 X7 B; b8 R 5 V- Y7 Y+ H$ W" _/ |1 J
          int survivor = josephus(n - 1, k, newSp);
    $ a3 ?7 r% `! _3 I' X! ~      if (survivor < newSp) {( j  |" _% g6 ]/ [. T" t( I
              return survivor;
    % U) e* [, X5 u# F      } else
    ; K5 J/ \5 i$ d, L) ^          return survivor + 1;& ]/ f' f& J; s, u* |* }  p% _2 U1 R
      }
      g$ a  r/ @5 c6 `: S$ n
    " m0 y7 e+ P8 e3 a8 D; i8 k* M另外有个更简洁的例子/ U5 t( R+ e" `
      def josephus(n, k):
    : X2 u8 j7 X( @# R0 b' p4 ]0 M    if n ==1:4 ^) N  z2 C  x6 O. b0 ]8 `  h0 ]
          return 1
    ' @6 `: M: k3 ~0 a9 H+ K    else:
    $ ?7 O/ X/ Y9 [/ M7 J* f  I      return ((josephus(n-1,k)+k-1) % n)+1
    7 Z- z. ~' V! }7 H9 x$ y1 ~; V6 p
    - f' |4 Z  E5 A$ M(如果n这个数字很大很大,k很小很小,电脑会不会转晕过去呢?)% m4 C1 K/ l7 o- U+ m
      o8 c  Z  D. P" x8 B: \# n0 Q3 v
    以上摘自 http://en.wikipedia.org/wiki/Josephus_problem#Solution8 W" s% T7 d$ A1 a. [

    2 P# X- P" P+ A2 d2 N& o: Y8 C; k: y) }- f9 k
    关于n的分析:7 M8 T( Y( M0 {0 V
    设f(n)为一开始有n个人时,生还者的位置。" u0 X8 n  w' S! ~4 J6 ^- [
    如果一开始有偶数个人,则第二圈时位置为x的人一开始在第2x - 1个位置。因此位置为f(2n)的人开始时的位置为2f(n) - 1。这便给出了以下的递推公式:
    " b0 c( u9 g6 ?: N, F$ t. k3 T" ^
    $ {# p) h3 x3 m' m  u9 ]f(2n)=2f(n)-1; d7 s% ~8 ^, l$ K3 h
    如果一开始有奇数个人,则走了一圈以后,最终是号码为1的人被杀。于是同样地,再走第二圈时,新的第二、第四、……个人被杀,等等。在这种情况下,位置为x的人原先位置为2x+1。这便给出了以下的递推公式:2 Y  A. W+ S' w- f4 s
    5 _4 V% @1 G/ J0 Q
    f(2n+1)=2f(n)+1
    & O. I5 Z2 ^# B% Y4 ?( x: h$ _. A; j* T2 Y

    . v9 T0 b, M+ V+ h2 [6 K; z# V' J, ]如果我们把n和f(n)的值列成表,我们可以看出一个规律:
    2 ]# `9 H1 A% R5 d+ E' j$ A+ s" C1 d& f
    1 W+ c& T, s) en    1    2        3        4        5        6        7        8        9        10        11        12        13        14        15    16& @8 S6 K1 |- k6 D. g% `
    f(n) 1    1        3        1        3        5        7        1        3        5        7        9        11        13        15        1; h9 z, x" o. Z& r9 r
    , t; K1 a- U$ p, I* Z' Y3 z1 T& L
    从中可以看出,f(n)是一个递增的奇数数列,每当n是2的幂时,便重新从f(n)=1开始。因此,如果我们选择m和l,使得n=2^m+l且0≤ l<2^m,那么f(n)=2 . l+1。显然,表格中的值满足这个方程。可以用数学归纳法给出一个证明。9 Q6 |9 R. m4 R

    0 _$ _0 C4 b" i  n" j; }" Z' X定理:如果n=2^m+l且0≤ l<2^m,则f(n) = 2.l+1。
    8 |8 T) a  F3 r9 @" d% P
    $ f- G0 I# {" a2 b
    7 m% m% D% ~( |' g% C- @+ }2 L答案的最漂亮的形式,与n的二进制表示有关:把n的第一位移动到最后,便得到f(n)。这可以通过把n表示为2^m+l来证明。

    该用户从未签到

    7#
    发表于 2014-7-17 11:19:06 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 11:02   K  }& Y/ K2 x, I/ a
    兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看7 v  [) s- h: |
    . j$ i) M# v, o; P* |
    在 ...

    5 B5 k! H! e2 O- Q8 l我的推法就是这个:- p- f) |5 j* l  ~2 ^! ]( ]7 H

    7 k! ^: a5 s: `: \2 k  return ((josephus(n-1,k)+k-1) % n)+1
    / O: |: u+ Z) t! a- H  u0 i/ ~* R! B. h: u$ J3 M5 q- @
    我有一点疏忽是如果整除,模的结果是0,但实际应该取n。所以这个表达式把 "+1"搞到括号外面就完全对了。
    ; g* B( Y: o2 q! P
    " S9 c0 b' p7 o- e3 k# e2的情况我没单拿出来搞。
  • TA的每日心情
    慵懒
    2020-5-10 00:00
  • 签到天数: 1237 天

    [LV.10]大乘

    8#
    发表于 2014-7-18 09:47:20 | 只看该作者
    绕死了
  • TA的每日心情
    慵懒
    前天 19:55
  • 签到天数: 2081 天

    [LV.Master]无

    9#
    发表于 2014-7-18 22:40:37 | 只看该作者
    看不懂
    : \/ W* M: a, C1 N" ?不过今天不幸运数是17
  • TA的每日心情
    擦汗
    2020-3-23 00:29
  • 签到天数: 134 天

    [LV.7]分神

    10#
     楼主| 发表于 2014-7-19 03:04:00 | 只看该作者
    常挨揍 发表于 2014-7-18 09:40
    & q( k/ H+ w: {$ ]  K1 Z看不懂+ K! @; o7 Y0 z
    不过今天不幸运数是17
    4 g( o8 }# o" f& N! X
    7月17日成了一个黑色的日子。很让人感觉生命无常。
      [* N% x6 r+ w& J; q7 f% ]0 c# w! D$ J5 b! k6 \
    以后出行挑日子,要找一个幸运数的交集,这里前面的9个数字也可以参考一下:1,3,7,9,13,15,21,25,31
    1 M8 o1 j# e( }9 I) R
    1 Q% z8 y- N- r. [! p: z: c13号如果遇上星期五,还是算了,不要不信邪。

    手机版|小黑屋|Archiver|网站错误报告|爱吱声   

    GMT+8, 2025-4-2 19:04 , Processed in 0.042706 second(s), 20 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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