设为首页收藏本站

爱吱声

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

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

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

    [LV.7]分神

    跳转到指定楼层
    楼主
    发表于 2014-7-16 11:30:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    上次说到  小小的停留之三 “计算机之父” 天才的数学家冯·诺伊曼
    9 D0 q: o$ b" G' i# o" q/ I% M看冯·诺伊曼的故事,他有句名言:“若人们不相信数学简单,只因他们未意识到生命之复杂。”, q9 s, j. Z. A9 K3 K$ N
    % G' H; m0 Q" f
    他有个好朋友,据说是最好的朋友,是生于匈牙利的波兰犹太人数学家乌拉姆,这位先生曾参与曼克顿计划(核武器上有Teller-Ulam design,Teller指爱德华·泰勒)。他亦有参与研究核能推动的航天飞机。在纯数学上,遍历理论、数论、集合论和代数拓扑都有他的足迹。
    " p+ I" f/ ]  m7 |) O! Q2 w  v, B$ ~$ t! L6 v" @, W
    所以我在这里要说的幸运数不是中餐馆的饼干里给你的数字,也不是买彩票开奖的数字,而是在1955年波兰数学家乌拉姆提出的一个自然数列,用类似埃拉托斯特尼筛法的算法后留下的整数集合。' r- I0 L: R- h9 n9 Z5 c3 V
    - m6 E& L8 C' |: s) |
    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.: k- k5 g: i' X. G4 J

    6 H/ [) c( y* a. c) M7 }幸运数的定义! w' C7 P2 J, T) g6 \5 ^
    FORMULA        - V# u/ I* c+ L
    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 x# ?! `  w) M$ e" @& U

    1 b6 L& s/ s' h# f* u$ a具体一点来说说幸运数列怎么筛选出来的(喜欢数论的同学一定知道挑选素数的埃拉托斯特尼筛法,这个办法是类似的)
    9 r2 w# i$ R5 D$ X1 V9 W6 u& y* P, n" c
    初始,从1开始的自然数列:3 z0 Z) V# \8 H5 o) V: s
    Begin with a list of integers starting with 1:
    ' {9 Z+ q  _2 A" l' f( t1        2        3        4        5        6        7        8        9        10        11        12        13        14        15        16        17        18        19        20        21        22        23        24        25  ……9 k6 [) h8 B! t7 |

    / c+ d' j: E% Z) B0 _3 O开始删除,在这个数列里,从2开始,首先是每隔2个数字,删除第二个数字。剩下来的数字是奇数~~( c) ~, e- r1 ~% \0 p
    剩下的数列如下:& z( `9 _3 g* D9 O& _* j/ R
    Every second number (all even numbers) is eliminated, leaving only the odd integers:+ v! `/ N7 B7 @9 |! ]" J: O
    1                3                5                7                9                11                13                15                17                19                21                23                25  ……5 f! |: H* i0 p
    5 v8 M( {4 @; d# Y$ W6 W: G
    接下来是3,每隔3个数字删除第三个。剩下的数列如下:
    : Z* l/ ?5 s9 C% JThe second term in this sequence is 3. Every third number which remains in the list is eliminated:+ W6 ?; y. k' t. I7 T* @# K
    1                3                                7                9                                13                15                                19                21                                25  ……
    7 \6 H  s1 U7 D/ Z! V" \. E
    . j* W3 I% H  ~8 X: }. u6 c现在接下来的数字是7,所以把上述数列中每第七个删除,剩下的数列是:1 G# M$ V) v7 {; B) f
    The next surviving number is now 7, so every seventh number that remains is eliminated:  f1 k0 |; y* ~0 G' Z6 c( I* J8 ^
    1                3                                7                9                                13                15                                                21                                25  ……' @- t3 {1 V9 H3 X

    ; I/ C( I% @& P6 p5 I接下来是9,……# I7 P& f3 N  ~* _
    这个过程可以一直无限继续下去,被幸运地留下来的数字就是幸运数。- r1 ]  e5 T& _/ [+ O

    , z5 I% X! u/ Q: n; H! 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).
    * _4 D, G1 V3 O4 D, v6 _; }; X% O* n在OEIS编号为A000959的数列就是Lucky numbers3 c  s& }; k- K: |3 a: {' Y: F
    上述链接给了一个稍微长一点的幸运数列:, c' i' ]$ {  U, \
    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 ……
    " K' G4 I9 o1 O4 G; d( Q" N! W1 w; _* ~' i
    有没有同样喜欢看数字的同学告诉我,你看了这个数列发现的是什么呢?
      ?, I& m! r" Q- g% [* H& J$ l  I2 S2 t# B9 x" N  Y. E6 P( S

    - u$ s4 u3 B& B3 A; b  C1 y  B  H8 j
    第一个短一点的数列,我发现,1,3,5,7的平方(1,9,25,49)都是幸运数,但9的平方81就不是,于是马上想,那么是不是只有奇素数的平方才是幸运数呢?答案是不,11的平方也不是。于是叶子的第一个猜想就在几秒里被叶子证明是错误的。
    / T* g4 ]7 U& A- y. ]$ h. O! M( Y
    数论里的各种数列是数学里最容易上手理解的,不过最迷人最折磨人的也是它。著名的例子就是哥德巴赫猜想(Goldbach's conjecture)。
    , u8 \& e& k% ^7 {5 ^) c0 q/ b9 x5 s幸运数的挑选过程,类似上面提到过的埃拉托斯特尼筛法挑选素数的过程,同时也和这个著名猜想有关。- b, {+ J; a; ^" v
    另外幸运数也曾经在正式进入书面讨论的时候被建议叫做 "the sieve of Josephus Flavius",因为它的挑选让大家想到著名的约瑟夫斯问题。/ }( S, V0 I  R

    ; R& V" w2 h4 ~2 H6 `! D$ B暂时就到这里吧,接下去要不要继续聊引出来的概念和问题呢?/ Z4 i) v/ `  V

    5 W+ p" Z$ S( u4 J. f8 F**什么叫做Conjecture?
      \* z2 X* O1 Z8 ^; _) r3 o* O**约瑟夫斯问题。

    评分

    参与人数 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)- g+ x" h9 L& l1 j& D! k

    4 Z5 N$ t7 \# Q6 l* @8 b猜想(conjecture)是一个看上去是真的,但尚未被证明的叙述。比如说上面提到的数学数列,因为它表现的没有规律和无限性,基于观察的某些结论,如果不能用科学逻辑的方法来证明在无限的未来它都是真的,那么之前所观察到的所有事实都仅仅是看上去是正确的。" e, u6 f3 Q+ ^( u1 l( v' w
    6 f1 x1 ?! m% S6 r* D8 R% P3 L
    当猜想被证明后,它便会成为定理。猜想一日未成为定理,数学家都要小心在逻辑结构之中使用这些猜想。4 \7 g* o9 Y# B8 o

    8 K* e$ [# A3 C* V7 H( H7 S猜想主要因为类比推理和偶然发现的巧合而出现。数学家通常会使用不完全归纳法,来测试自己的猜想。例如费马曾经根据首四个费马数是素数,便猜想所有费马数都是素数(此猜想已被推翻)
    ' Q4 x8 k! t8 K2 D7 z0 e
    2 h: s5 D2 S' h1 g假说(Hypothesis),即指按照预先设定,对某种现象进行的解释,即根据已知的科学事实和科学原理,对所研究的自然现象及其规律性提出的推测和说明,而且数据经过详细的分类、归纳与分析,得到一个暂时性但是可以被接受的解释。任何一种科学理论在未得到实验确证之前表现为假设学说或假说。
    ; _. k! S# [0 d) ^$ [/ }
    0 I1 M- ~  h1 `有的假设还没有完全被科学方法所证明,也没有被任何一种科学方法所否定,但能够产生深远的影响。如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 编辑
    0 b; Y, V# X( Y6 L! [* Z& w! Y, D5 M
    8 u. i- O" E& u0 G! n/ l**约瑟夫斯问题    都教授
    : P( `1 v  P( I3 j8 O! B7 B( v' n* C! o) d: L
    我们来聊聊约瑟夫斯问题。
    2 {- y% j$ n0 {5 F, v: G( n6 s' E: Y  \5 t. H: B5 ~+ P
    有n个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。
    3 J/ e# v/ H3 R( a
    * ~9 i. r" J# C/ \& B问题是,给定了n和k,一开始要站在什么地方才能避免被处决?
    7 ^" |7 s; r2 i: l, {5 D
    % H  g3 b* O" u4 q4 B* c9 Y& U8 f; ~5 l8 V0 u, S- M% m
    ---------------------------------------不思考的分割线---------------------------------------------+ f/ ^9 R" }8 N
    据说这个问题是一个经常出现在计算机算法中的问题,不过当年我读书的时候对它并没有特别注意。在计算机编程的算法中,类似问题又称为约瑟夫环。老兵和神牛肯定比我清楚得多。我就不多说什么算法了。牛教授 兵教授  ; w4 J5 H: X6 W' r6 H0 Z5 F

    - H9 ^  [8 {4 K8 Q9 P---------------------------------------历史八卦的分割线----------------------------------
    & A) i% C% u  |  G7 P这个问题是以弗拉维奥·约瑟夫斯命名的,他是1世纪的一名犹太历史学家。$ ]6 G6 s& c" m6 T
    据载,他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意。   

    该用户从未签到

    5#
    发表于 2014-7-17 09:30:00 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 06:50 5 M/ j* C( w, L1 h0 Y$ S2 Y- e
    **约瑟夫斯问题    都教授
    % R* D! [4 f# ]
    6 Y# M  B1 k4 N+ v* ^7 s% g. C我们来聊聊约瑟夫斯问题。
    ' m6 G: _, P6 ?1 @4 s1 c$ {6 ]! R
    1. 经过努力学习,这题我能用java编程做了,oh yeah!
    ' }% ^. D5 M3 I7 h" y- U
    3 R/ U; {: c) ~- X2 }8 O- {2. 但叶子问我的不是编程。对于给定的k,我可以用倒推法硬推。但是,想了半天也没有想到不用推的直接算法。* |+ w) j6 N4 u) @
    - m* U9 o7 z6 w5 A
    推的方法如下:% C4 E2 e$ W9 V% Z! `
    ' ?7 U$ ]% U! [- J) {
    n=1,就一号,跑不掉的
    + i/ e0 V6 t6 R  ~8 o+ w- J, pn=2, 要站 (k+1) 模 n 那一号设a(2),比如 k=2, 则 a2=1 (号); 若 k=3, 则 a2=2
    % V# X& o( l7 V# `如此类推,n=i 时,要站在 a(i-1)+k 模 n 那一号。比如,k=6, n=19 时 要站在14号。
    . l5 B- p  f6 x/ D5 N5 c6 l' p( l0 c- ?8 H1 ~9 }! I

    9 E) M/ m4 {2 ^  }我算到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 编辑
    ! p8 d6 @# _8 A" l
    独角兽 发表于 2014-7-16 20:30 ; w6 d- L% e4 y/ @
    1. 经过努力学习,这题我能用java编程做了,oh yeah!
    * N$ e. m. p5 b  ~% n9 C* Z  l, R8 N7 a; I0 R; |# H
    2. 但叶子问我的不是编程。对于给定的k,我可以用 ...

    8 k" L5 k3 L4 l( S0 n: j+ d8 `8 B, n% q& b# i
    兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看
      S* I6 P* \$ j* [! E8 G1 e6 A& B3 Y2 v3 O4 c( [5 a8 \, I
    在维基上看到K=2的解法和还有K≠2的通用解法,这里摘抄过来那段关于n的有趣分析。
    ' J5 F" F7 |6 ?5 t) A/ ]! [0 ]5 o1 U' \1 F: F
    还有下面我抄了两个通用算法,那个java的是不是和你做的一样啊?
    - Y& p! G" M& n
    # _% F3 C9 W6 s0 f7 H-----------------------------不动脑筋的分割线--------------------------& D! v5 l4 ^* B6 A! [$ ~
    4 R5 O: q3 b/ [- r
    一个小心翼翼的Java例子:; {; D" X; U; v0 a: y
    3 z6 x: y( q# n9 B1 I, n! p5 n" C  w
    int josephus(int n, int k) {
    4 c; N5 x% ^# |9 s        return josephus(n, k, 1);2 t0 Q" e/ S; \7 q0 N3 e! E: f6 h& J
      }7 p6 x: F$ W3 |* Y
      int josephus(int n, int k, int startingPoint) {- H" ]& T9 V# r+ g2 s  A5 L. m
          if(n == 1)& s$ k1 W* B. E% q# E3 G9 f7 I
              return 1;% H; l+ G* a) p$ @# B: V
          int newSp = (startingPoint + k - 2) % n + 1;
    ( [- J- D$ u0 \( Z/ ^
    % G6 n0 i/ u: [      int survivor = josephus(n - 1, k, newSp);
    ! i- l2 d2 m. B2 l9 D      if (survivor < newSp) {
    " `9 ?7 G, k0 J          return survivor;+ ^7 G' s- z; \! ~
          } else. x$ ~8 y: T3 |) R$ j; q( }
              return survivor + 1;
    & P" L! n7 [! [" |1 C, \, @  }6 g7 w  k  q5 |) g1 N/ m
      l' p: A- ^4 _2 I, `
    另外有个更简洁的例子; L5 k1 q4 u8 X! s$ L8 F
      def josephus(n, k):5 J2 J9 h5 T$ i9 t
        if n ==1:
    4 f& |. N% N2 S* n! S- [      return 1! n& H; U5 T- i7 c3 n% ]5 ]1 v# }+ J
        else:, o, ?( T0 ~! C3 l2 o" l
          return ((josephus(n-1,k)+k-1) % n)+1
    ( E7 k( {' ~% L6 {: _) [5 ^, e* l+ K  L+ S- ]- S' Q5 @
    (如果n这个数字很大很大,k很小很小,电脑会不会转晕过去呢?)
    4 Q5 l" ^8 H) O" t- ]4 |
    4 M% x+ q1 G* u+ ?' j3 \5 `以上摘自 http://en.wikipedia.org/wiki/Josephus_problem#Solution
    - m0 a  n2 v+ I: t) n
    6 G! C' G+ U1 A1 A4 M! k# [) P1 B' x* A$ c3 i* I" v
    关于n的分析:
    , P6 D1 [, n# B" q# J7 b设f(n)为一开始有n个人时,生还者的位置。& K; ^1 u, ]5 U/ h
    如果一开始有偶数个人,则第二圈时位置为x的人一开始在第2x - 1个位置。因此位置为f(2n)的人开始时的位置为2f(n) - 1。这便给出了以下的递推公式:
    5 Q! }* K% D1 B1 f: g& I6 F
    % \3 p0 @' b, Vf(2n)=2f(n)-14 w. l3 V4 f" K# Q# i! X3 X
    如果一开始有奇数个人,则走了一圈以后,最终是号码为1的人被杀。于是同样地,再走第二圈时,新的第二、第四、……个人被杀,等等。在这种情况下,位置为x的人原先位置为2x+1。这便给出了以下的递推公式:
    * y/ B; q7 j6 @3 A: u. v4 n! N$ Y% r. d
    f(2n+1)=2f(n)+1
    2 J( Z7 x4 |. ?( h3 i! P+ m' O' t7 \

    + t9 w$ r( [6 o' t2 D. W, D如果我们把n和f(n)的值列成表,我们可以看出一个规律:
    3 W; A, B( t+ _& S2 c. Z' b
    5 h; ]( ?& C& k0 h; On    1    2        3        4        5        6        7        8        9        10        11        12        13        14        15    164 j) A9 J  g  H7 M; {- h  k, Y- y
    f(n) 1    1        3        1        3        5        7        1        3        5        7        9        11        13        15        1
    $ n+ [5 a" H4 S9 ~& ^  _
    , E$ v- n# T0 F, z/ @3 B+ d从中可以看出,f(n)是一个递增的奇数数列,每当n是2的幂时,便重新从f(n)=1开始。因此,如果我们选择m和l,使得n=2^m+l且0≤ l<2^m,那么f(n)=2 . l+1。显然,表格中的值满足这个方程。可以用数学归纳法给出一个证明。: z( ?* N( P* F' f  p

    , f8 X5 e) Z& t5 v定理:如果n=2^m+l且0≤ l<2^m,则f(n) = 2.l+1。
    ! b! u' m2 B' M1 w% X* r( {9 n+ g* r& ]' K8 \4 L3 z0 g# y2 U
    1 z9 ?0 v/ h6 ~1 p7 f1 |# o9 P
    答案的最漂亮的形式,与n的二进制表示有关:把n的第一位移动到最后,便得到f(n)。这可以通过把n表示为2^m+l来证明。

    该用户从未签到

    7#
    发表于 2014-7-17 11:19:06 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 11:02
    / ?! n& \: A2 V, J兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看& }+ R* @& o8 Q- j
    + X- X9 f' `7 ^" H" N4 ]
    在 ...

    7 T. ?  p9 c, ]1 ]我的推法就是这个:
    / N8 U+ j( r- ~
    5 [- g' r: G' V: I6 i4 d& _7 {  return ((josephus(n-1,k)+k-1) % n)+1; J% U) G8 y; ~# G, L
    " _  s* z( t; y3 l; Z
    我有一点疏忽是如果整除,模的结果是0,但实际应该取n。所以这个表达式把 "+1"搞到括号外面就完全对了。
    : i/ n" ]8 D1 d, P+ M4 v6 n8 P1 T: h; C' C; y& N5 |& y+ H
    2的情况我没单拿出来搞。
  • TA的每日心情
    慵懒
    昨天 19:31
  • 签到天数: 1399 天

    [LV.10]大乘

    8#
    发表于 2014-7-18 09:47:20 | 只看该作者
    绕死了
  • TA的每日心情
    慵懒
    2026-6-27 09:25
  • 签到天数: 2303 天

    [LV.Master]无

    9#
    发表于 2014-7-18 22:40:37 | 只看该作者
    看不懂, I8 F' K! f4 g, a0 O
    不过今天不幸运数是17
  • TA的每日心情
    擦汗
    2020-3-23 00:29
  • 签到天数: 134 天

    [LV.7]分神

    10#
     楼主| 发表于 2014-7-19 03:04:00 | 只看该作者
    常挨揍 发表于 2014-7-18 09:40 : t1 o2 |- A; _0 W9 H" W% \1 S
    看不懂5 z. p- Y7 c5 R# P! u$ I7 x1 N0 V
    不过今天不幸运数是17

    ( u6 T3 f  B) Z* P7月17日成了一个黑色的日子。很让人感觉生命无常。2 X* d7 e2 C4 z

    & Y: Y5 {# w, @$ v以后出行挑日子,要找一个幸运数的交集,这里前面的9个数字也可以参考一下:1,3,7,9,13,15,21,25,31
    ; R( [* O( o1 L0 O, h7 R5 Y8 \8 v) \; O( g6 q4 }, ~! d5 O
    13号如果遇上星期五,还是算了,不要不信邪。

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

    GMT+8, 2026-8-12 03:21 , Processed in 0.073637 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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