设为首页收藏本站

爱吱声

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

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

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

    [LV.7]分神

    跳转到指定楼层
    楼主
    发表于 2014-7-16 11:30:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    上次说到  小小的停留之三 “计算机之父” 天才的数学家冯·诺伊曼" W; k) O: R9 I5 m" _8 O- @
    看冯·诺伊曼的故事,他有句名言:“若人们不相信数学简单,只因他们未意识到生命之复杂。”
    : y' D9 G5 {. v$ Q! t) g( s0 P+ I- a  S
    他有个好朋友,据说是最好的朋友,是生于匈牙利的波兰犹太人数学家乌拉姆,这位先生曾参与曼克顿计划(核武器上有Teller-Ulam design,Teller指爱德华·泰勒)。他亦有参与研究核能推动的航天飞机。在纯数学上,遍历理论、数论、集合论和代数拓扑都有他的足迹。  N8 [5 s* }5 k' u
    9 [3 ^+ n/ K; }" \
    所以我在这里要说的幸运数不是中餐馆的饼干里给你的数字,也不是买彩票开奖的数字,而是在1955年波兰数学家乌拉姆提出的一个自然数列,用类似埃拉托斯特尼筛法的算法后留下的整数集合。7 G( ^2 d* Q1 M( ]" B
      O. p% K7 ~' }( u; p% f9 V. J7 d
    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.
    , ?! s' y4 n: b, S, ~& I0 B( V3 d0 n! V3 X% Y+ B3 C! d
    幸运数的定义
    3 ]: z# U9 J" W8 f( S7 S8 TFORMULA       
    # m* n4 ~5 @0 ^0 y* tStart 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.2 e3 P+ N9 S/ s8 B7 ?
    ( a# Z9 L. V" F1 M5 F) {
    具体一点来说说幸运数列怎么筛选出来的(喜欢数论的同学一定知道挑选素数的埃拉托斯特尼筛法,这个办法是类似的)
    + b9 _/ r5 j% a) ~6 w; `0 M) L6 E" f6 [
    初始,从1开始的自然数列:. [/ H! O9 u  Y! ?" H' I0 z! c
    Begin with a list of integers starting with 1:
    ; p$ @# x, J* c3 ?0 S9 c3 ^- p9 ~1        2        3        4        5        6        7        8        9        10        11        12        13        14        15        16        17        18        19        20        21        22        23        24        25  ……
    ( ]! L/ j8 u; }/ C( z7 C2 S9 {/ [
    4 P2 j) ]  T- X8 D0 B% U开始删除,在这个数列里,从2开始,首先是每隔2个数字,删除第二个数字。剩下来的数字是奇数~~: v1 I: H% e1 J9 _
    剩下的数列如下:: X3 p& p& T* ~' i& I. S$ l
    Every second number (all even numbers) is eliminated, leaving only the odd integers:; x% O6 u" X/ Z( N' A( ]) e$ x
    1                3                5                7                9                11                13                15                17                19                21                23                25  ……
    2 W: p' W! o! K" f& G* P. N3 C* w
    接下来是3,每隔3个数字删除第三个。剩下的数列如下:
    % v2 [) ~, G5 y% R0 T4 V, [/ ~6 Z. RThe second term in this sequence is 3. Every third number which remains in the list is eliminated:
    * c! L: C" s; L1 g: R1                3                                7                9                                13                15                                19                21                                25  ……
    , U$ x& Z7 I9 h. }7 o( o4 ^! g5 E0 _6 J, d) V, @: p
    现在接下来的数字是7,所以把上述数列中每第七个删除,剩下的数列是:8 M. E( W# u4 A8 {2 \& x' u5 h" F0 @
    The next surviving number is now 7, so every seventh number that remains is eliminated:
    8 ~/ v: M; N3 q1                3                                7                9                                13                15                                                21                                25  ……
    - [* h1 ?7 S$ `, d1 G# p
    ) g! W3 J1 `4 ?5 t0 c& \: |接下来是9,……
    # }% k% z1 r4 D这个过程可以一直无限继续下去,被幸运地留下来的数字就是幸运数。" H# U: x# N* ?2 u" c. P5 D, f

    / w6 c; H$ j  E( q, w- m: 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).
    - l5 G, n& I8 q* P' X$ O7 q在OEIS编号为A000959的数列就是Lucky numbers. n7 x, G* H* U' D& W; z
    上述链接给了一个稍微长一点的幸运数列:
    ! [4 i& ?" h; h: w* I1, 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 ……
    & Z3 O' d! q% K3 v$ r; S' q7 o: J- [6 I: c
    有没有同样喜欢看数字的同学告诉我,你看了这个数列发现的是什么呢?  ]6 V5 |% W0 I* L* C
    7 L: I* f9 a! K' r

    6 r$ V! D9 |2 z# Z6 H, a. d. s8 C" {
    第一个短一点的数列,我发现,1,3,5,7的平方(1,9,25,49)都是幸运数,但9的平方81就不是,于是马上想,那么是不是只有奇素数的平方才是幸运数呢?答案是不,11的平方也不是。于是叶子的第一个猜想就在几秒里被叶子证明是错误的。
    7 c4 P% e3 a' Q6 ~  i) U
    7 H& o6 Y- [' E/ F  J. ?( L数论里的各种数列是数学里最容易上手理解的,不过最迷人最折磨人的也是它。著名的例子就是哥德巴赫猜想(Goldbach's conjecture)。
    + S- {5 o* Y* p' N幸运数的挑选过程,类似上面提到过的埃拉托斯特尼筛法挑选素数的过程,同时也和这个著名猜想有关。
    ) n9 u* p5 M" T另外幸运数也曾经在正式进入书面讨论的时候被建议叫做 "the sieve of Josephus Flavius",因为它的挑选让大家想到著名的约瑟夫斯问题。: i3 K$ g6 G2 b- U
    - l+ @4 M- O( i2 s, ?
    暂时就到这里吧,接下去要不要继续聊引出来的概念和问题呢?
    4 D* u8 `: Q( \. @# d# ]
    6 Q/ ^8 ]+ g& q" l; `; n7 H**什么叫做Conjecture?5 a& s, _# g- ^4 u8 h9 f
    **约瑟夫斯问题。

    评分

    参与人数 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)! V5 c9 i  X6 T3 S4 N0 a# h! {
    , S3 `6 W; S8 |2 S8 u* l
    猜想(conjecture)是一个看上去是真的,但尚未被证明的叙述。比如说上面提到的数学数列,因为它表现的没有规律和无限性,基于观察的某些结论,如果不能用科学逻辑的方法来证明在无限的未来它都是真的,那么之前所观察到的所有事实都仅仅是看上去是正确的。
    % x6 b+ V8 S+ Z3 m- o! l3 n4 ]' `- p6 ^7 N4 J; b2 }
    当猜想被证明后,它便会成为定理。猜想一日未成为定理,数学家都要小心在逻辑结构之中使用这些猜想。4 _" P) d' Q% Z& q% C2 \

    0 f8 n' k% F9 I8 a' g猜想主要因为类比推理和偶然发现的巧合而出现。数学家通常会使用不完全归纳法,来测试自己的猜想。例如费马曾经根据首四个费马数是素数,便猜想所有费马数都是素数(此猜想已被推翻)* s( u6 _7 V# ^0 W
    ( t0 M7 Z$ E, n7 c
    假说(Hypothesis),即指按照预先设定,对某种现象进行的解释,即根据已知的科学事实和科学原理,对所研究的自然现象及其规律性提出的推测和说明,而且数据经过详细的分类、归纳与分析,得到一个暂时性但是可以被接受的解释。任何一种科学理论在未得到实验确证之前表现为假设学说或假说。
    $ K; c/ m0 h, A3 t# C0 [/ ^& j: G/ u# V
    有的假设还没有完全被科学方法所证明,也没有被任何一种科学方法所否定,但能够产生深远的影响。如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 编辑
    ( j1 A& o: S, r0 D. q
    ( P+ n9 V4 P1 |( {& V& `8 L. a**约瑟夫斯问题    都教授 " W8 n9 l6 A6 @$ W; [
      N6 |: q& E2 k& o" @6 Q
    我们来聊聊约瑟夫斯问题。! M- ]! H( I) Q5 s( U

    4 |, k4 R5 j7 Z# g$ `. J有n个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。
    * ?% y* q4 V/ K, O- F* j# ?# n5 |7 B, E1 h
    问题是,给定了n和k,一开始要站在什么地方才能避免被处决?
    2 d5 |( C% S, `! [( |, O; _# Z" Z' Q+ U+ u9 d
    * a, k& S' e3 `7 ^, a' @
    ---------------------------------------不思考的分割线---------------------------------------------0 W( _# n/ l/ s
    据说这个问题是一个经常出现在计算机算法中的问题,不过当年我读书的时候对它并没有特别注意。在计算机编程的算法中,类似问题又称为约瑟夫环。老兵和神牛肯定比我清楚得多。我就不多说什么算法了。牛教授 兵教授  9 l9 W! I0 o  y: W. [4 I* d" W
    2 i7 W  S0 o; Y( D% T; Q
    ---------------------------------------历史八卦的分割线----------------------------------
    - k; ~- e1 |2 ^8 C* ^这个问题是以弗拉维奥·约瑟夫斯命名的,他是1世纪的一名犹太历史学家。/ j4 x& I1 {' `0 o9 o; O
    据载,他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意。   

    该用户从未签到

    5#
    发表于 2014-7-17 09:30:00 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 06:50 $ S) c/ `. }+ D) `2 \: z8 T" a4 v
    **约瑟夫斯问题    都教授 5 o8 o6 H7 W. U* J7 ?8 x. T5 U* |# Q5 z
    ) ]: N- d- L! U* ?1 K( {3 m; v" h
    我们来聊聊约瑟夫斯问题。
    2 G. L, H6 ?5 T
    1. 经过努力学习,这题我能用java编程做了,oh yeah!
    " i1 q/ k0 f2 l5 T. y  n: E6 B; R7 u! Q) T: y! \" @
    2. 但叶子问我的不是编程。对于给定的k,我可以用倒推法硬推。但是,想了半天也没有想到不用推的直接算法。
    5 F5 h) D' p; K( v7 O* D# W# w9 M; t- Q
    推的方法如下:
    ; a, ]7 b8 S# D/ S$ M( U: c
    4 v4 E% ?' f9 @3 R+ i% K# F! |; yn=1,就一号,跑不掉的
    / g- a+ V1 a, Xn=2, 要站 (k+1) 模 n 那一号设a(2),比如 k=2, 则 a2=1 (号); 若 k=3, 则 a2=2
    * _3 H, b7 h9 U1 s+ P如此类推,n=i 时,要站在 a(i-1)+k 模 n 那一号。比如,k=6, n=19 时 要站在14号。3 @# t% b& B2 r3 v

    % \. |% b5 B+ b3 a) g5 ~4 h% H. L3 B
    6 j8 {+ E" m3 D) h( n) A% }5 S我算到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 编辑
    # i9 s, G2 ?: [! m7 b) i
    独角兽 发表于 2014-7-16 20:30 5 r; I3 [; y1 Y! F- U! j5 ^5 q
    1. 经过努力学习,这题我能用java编程做了,oh yeah!( c7 w! {3 `1 N" n
    ) g, K- T$ F- M' ?6 ~" I7 }
    2. 但叶子问我的不是编程。对于给定的k,我可以用 ...
    : t+ F9 k2 ^6 x/ f6 {
    . a% m! I# E- v8 X& r+ h& ?* I" Q5 Z
    兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看
    1 D  B1 b5 ]4 W  j
    , }- G+ A& u5 j# e在维基上看到K=2的解法和还有K≠2的通用解法,这里摘抄过来那段关于n的有趣分析。
    / `/ X) r; M6 M: T+ E5 {$ ?; k3 T0 U# q" y, D  M+ D9 A
    还有下面我抄了两个通用算法,那个java的是不是和你做的一样啊?* ?/ k8 ^- e' S2 u
    " C, _1 `* _: i2 V4 k: J+ n
    -----------------------------不动脑筋的分割线--------------------------
    / x8 B& C1 A; N1 i- ~* h- [* i7 k
    ( D3 ^, X  T+ F" `/ I* C一个小心翼翼的Java例子:
    ) Z( q7 l7 @; o2 [2 v4 W" s1 V& G1 r& I% f
    int josephus(int n, int k) {
    1 L9 [3 q8 [& T  a( _        return josephus(n, k, 1);$ _4 w% G/ _. v) h. e7 w- a9 A
      }
    ; r! F& e- q: H2 v) c' K& f6 l% A0 S! U  int josephus(int n, int k, int startingPoint) {
    % M: \/ b* k1 v; }+ u' f      if(n == 1)
    ; ?" t4 R( o8 O0 T  A3 `) ^          return 1;
    0 x5 E  ^: u2 ]" n# s8 j  d      int newSp = (startingPoint + k - 2) % n + 1;% z3 @, [+ x% ?" M7 e
    3 ]* Z+ \; e. d/ V
          int survivor = josephus(n - 1, k, newSp);
    / g7 I  t/ y2 k9 U      if (survivor < newSp) {5 v2 l8 q2 K, _5 Q$ x
              return survivor;4 ~9 X# L# Q+ J# T% U
          } else0 Z3 Y: x0 @& O. E8 I* _
              return survivor + 1;( P. D# t! ^" `& J/ C
      }7 v+ U2 O$ H' c2 W  [% P+ p
    ; S6 f  f2 L' N' _0 M( d3 k
    另外有个更简洁的例子: H+ F( {) ^( t
      def josephus(n, k):
    $ [9 E6 M& ^4 c0 @7 h, ^4 f    if n ==1:" C( C' s2 h/ u5 N& U
          return 14 S: |" C0 I4 Z. t8 X6 l6 S
        else:
    ) M6 t& M8 }8 X& L2 L2 m      return ((josephus(n-1,k)+k-1) % n)+1
    0 p  f/ m, V% b
    % q7 [5 Q" j7 ^/ h0 A& Z(如果n这个数字很大很大,k很小很小,电脑会不会转晕过去呢?)
      H% ~- ?6 C; z" @
    + u7 {/ |% I  h- T& j以上摘自 http://en.wikipedia.org/wiki/Josephus_problem#Solution0 v( D4 m. c1 N3 k9 J

    " }3 y3 Y# Y% K, y1 o* t3 D0 p; u0 ]+ _5 f: ~
    关于n的分析:, v# @" G  f2 B5 w, J; t# `' V) g
    设f(n)为一开始有n个人时,生还者的位置。( E$ J+ ]7 z: Q! p) P
    如果一开始有偶数个人,则第二圈时位置为x的人一开始在第2x - 1个位置。因此位置为f(2n)的人开始时的位置为2f(n) - 1。这便给出了以下的递推公式:( ?# f* a+ K6 [- ?' \
    8 z( c3 ?9 t1 W% L  n/ V
    f(2n)=2f(n)-1/ F+ Q9 n8 v  g( G/ S
    如果一开始有奇数个人,则走了一圈以后,最终是号码为1的人被杀。于是同样地,再走第二圈时,新的第二、第四、……个人被杀,等等。在这种情况下,位置为x的人原先位置为2x+1。这便给出了以下的递推公式:
    ' o; r5 @" L& `! R# b  Z! m& [$ i1 B* E+ @. M  x6 ]  ]7 s# R- t% [2 ?$ h- W
    f(2n+1)=2f(n)+1) L8 i# A- }* r2 _$ P' y

    ' M) B" `& u8 v- {9 \& a0 m$ k
    4 s' e1 v; y% J如果我们把n和f(n)的值列成表,我们可以看出一个规律:
    6 H1 X  j$ ?8 x- f: S0 n/ }; i0 Y
    " y9 r* c  B9 n; M* v9 Z3 x* ?3 |  xn    1    2        3        4        5        6        7        8        9        10        11        12        13        14        15    16
      @! b0 P# {6 G; Q  E4 a8 ~f(n) 1    1        3        1        3        5        7        1        3        5        7        9        11        13        15        18 m* A( ?( E0 [( [) P3 i2 P
    ; l4 n: x+ a- n) l
    从中可以看出,f(n)是一个递增的奇数数列,每当n是2的幂时,便重新从f(n)=1开始。因此,如果我们选择m和l,使得n=2^m+l且0≤ l<2^m,那么f(n)=2 . l+1。显然,表格中的值满足这个方程。可以用数学归纳法给出一个证明。
    3 L* p) F# h% C" d7 A$ i7 H7 s* }! h' y
    , e' q8 R) J/ O% A5 P% m定理:如果n=2^m+l且0≤ l<2^m,则f(n) = 2.l+1。
    3 s6 d( a+ r! X, H& O+ ]
    3 P! g2 ~, }1 u- U; d( z2 e: \! [# ^7 _: M1 f! x& g
    答案的最漂亮的形式,与n的二进制表示有关:把n的第一位移动到最后,便得到f(n)。这可以通过把n表示为2^m+l来证明。

    该用户从未签到

    7#
    发表于 2014-7-17 11:19:06 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 11:02
    ! @6 [* e3 j. h+ [5 }: i  J兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看( u$ ]8 w( J# y( g: n0 a6 [

    ( L2 S# x- y$ {: U+ M. s* W在 ...
    5 t& ^7 Q$ N, |, ~4 B
    我的推法就是这个:
    7 O: F# X% q" |
    ; ]& j/ n& M; Y& x' v; ?  return ((josephus(n-1,k)+k-1) % n)+1
    / {! C  n8 p+ R$ W: V
    5 M& j! p7 z8 Q我有一点疏忽是如果整除,模的结果是0,但实际应该取n。所以这个表达式把 "+1"搞到括号外面就完全对了。
    % Q! O" B6 l( g* P% H  H
    & Z9 V- T! C5 z( o2的情况我没单拿出来搞。
  • TA的每日心情
    慵懒
    2020-5-10 00:00
  • 签到天数: 1237 天

    [LV.10]大乘

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

    [LV.Master]无

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

    [LV.7]分神

    10#
     楼主| 发表于 2014-7-19 03:04:00 | 只看该作者
    常挨揍 发表于 2014-7-18 09:40
    5 d7 V4 @# K: A3 E! J  w看不懂6 g! l$ Y' Z% p/ Q" W" N' m
    不过今天不幸运数是17

    " }& Y# w' \, g- L: N9 Y9 i7月17日成了一个黑色的日子。很让人感觉生命无常。
    - Q& Y% t4 b1 t8 R; K8 p: p& p5 R
    以后出行挑日子,要找一个幸运数的交集,这里前面的9个数字也可以参考一下:1,3,7,9,13,15,21,25,31
    ! }+ ]4 E6 d6 I) X
    & M% y' y5 e9 Q& X' m6 P; _, V: C13号如果遇上星期五,还是算了,不要不信邪。

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

    GMT+8, 2025-10-25 17:08 , Processed in 0.037058 second(s), 22 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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