设为首页收藏本站

爱吱声

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

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

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

    [LV.7]分神

    跳转到指定楼层
    楼主
    发表于 2014-7-16 11:30:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    上次说到  小小的停留之三 “计算机之父” 天才的数学家冯·诺伊曼0 f( |4 ^6 D( @5 t& Z* w
    看冯·诺伊曼的故事,他有句名言:“若人们不相信数学简单,只因他们未意识到生命之复杂。”
    3 q, I; s4 s5 s4 ?: O4 T# z( h7 l
    他有个好朋友,据说是最好的朋友,是生于匈牙利的波兰犹太人数学家乌拉姆,这位先生曾参与曼克顿计划(核武器上有Teller-Ulam design,Teller指爱德华·泰勒)。他亦有参与研究核能推动的航天飞机。在纯数学上,遍历理论、数论、集合论和代数拓扑都有他的足迹。+ y! W. N; o* l3 |  a( D+ j

    " {9 p  I3 A8 ~) l) C所以我在这里要说的幸运数不是中餐馆的饼干里给你的数字,也不是买彩票开奖的数字,而是在1955年波兰数学家乌拉姆提出的一个自然数列,用类似埃拉托斯特尼筛法的算法后留下的整数集合。1 O$ j. \: x) K' [

    % y& |& l! J( \& {+ FIn 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.
    ' e) `: [% Z6 ~1 F3 T( _1 D* P' L5 Z) e! R6 d9 K
    幸运数的定义3 z; }9 J( C. X$ D6 j4 ?
    FORMULA       
    $ |$ c( ?- A+ @" G" }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 A5 V8 q8 V! u; \9 p1 K
    6 ~( z. t' L4 d6 N1 ^2 T具体一点来说说幸运数列怎么筛选出来的(喜欢数论的同学一定知道挑选素数的埃拉托斯特尼筛法,这个办法是类似的)
    % Z) {! w3 V+ r+ G, ^
    8 M  j0 a: H9 K2 b. a# u9 M初始,从1开始的自然数列:" T" {3 l- ?  N' ?4 x
    Begin with a list of integers starting with 1:
    # N! m1 \0 l  |  W4 S! `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  ……/ X$ {4 u3 B8 d% R6 ]
    % g$ P- _- ]! V" f6 r3 \1 T
    开始删除,在这个数列里,从2开始,首先是每隔2个数字,删除第二个数字。剩下来的数字是奇数~~
    % H: Q, N6 K1 |& J: P; Y( x剩下的数列如下:) i- M$ w1 V3 J7 \! N! r8 B. l
    Every second number (all even numbers) is eliminated, leaving only the odd integers:6 Y/ D2 O2 N- U5 V% V. H
    1                3                5                7                9                11                13                15                17                19                21                23                25  ……$ d6 u3 t+ e9 h' F) }
    " e8 O$ A' l, j3 s
    接下来是3,每隔3个数字删除第三个。剩下的数列如下:5 L) k! X+ T, @& {9 x: `. W, ^( ^; K
    The second term in this sequence is 3. Every third number which remains in the list is eliminated:
    - n3 M6 ~- p# D( x: |9 o* i9 Y1                3                                7                9                                13                15                                19                21                                25  ……
    % }& q: G( l% @: v2 k' Z* q9 }" _& F* a* M
    现在接下来的数字是7,所以把上述数列中每第七个删除,剩下的数列是:
      Y8 o/ W1 L, W4 JThe next surviving number is now 7, so every seventh number that remains is eliminated:
    ( ]" C* o( D& i! G# Z2 F1                3                                7                9                                13                15                                                21                                25  ……
    7 v+ p* s) J8 ~+ K# U$ m1 e$ ?) ~9 r, p" t$ J% }( h* j+ B
    接下来是9,……
    / }$ ]$ G" x  V- g这个过程可以一直无限继续下去,被幸运地留下来的数字就是幸运数。0 o! H1 l: p! \" @! L

    4 r6 h( _# }1 K5 U; D+ F' z: a- D1, 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).
    ) \) A4 y3 q6 v% n3 c0 _! F! V. K在OEIS编号为A000959的数列就是Lucky numbers; L, }( b9 A) b' n" w* a
    上述链接给了一个稍微长一点的幸运数列:' a# i  A1 e# l+ 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 ……
    $ `# F/ \: T$ c1 t- _: H8 A% ?7 P( Z! B9 j+ k" ?& q. E" _/ J0 g9 I
    有没有同样喜欢看数字的同学告诉我,你看了这个数列发现的是什么呢?7 ~1 Z) \: e, {
    2 N6 Z: F  P* Q# B+ A7 }( n

    3 p" n2 J7 M5 y2 ^1 {/ l1 E( L. g8 y' ?% j+ }5 ]
    第一个短一点的数列,我发现,1,3,5,7的平方(1,9,25,49)都是幸运数,但9的平方81就不是,于是马上想,那么是不是只有奇素数的平方才是幸运数呢?答案是不,11的平方也不是。于是叶子的第一个猜想就在几秒里被叶子证明是错误的。* g7 }. P/ i& N( Q2 }

    3 J7 I% m$ {0 ~! i, W% m  C6 l' X4 X数论里的各种数列是数学里最容易上手理解的,不过最迷人最折磨人的也是它。著名的例子就是哥德巴赫猜想(Goldbach's conjecture)。- V- J( J9 H3 W9 F, T  q( J
    幸运数的挑选过程,类似上面提到过的埃拉托斯特尼筛法挑选素数的过程,同时也和这个著名猜想有关。7 c7 T$ ^9 E2 ?7 ~2 {0 g
    另外幸运数也曾经在正式进入书面讨论的时候被建议叫做 "the sieve of Josephus Flavius",因为它的挑选让大家想到著名的约瑟夫斯问题。, s9 Y' G( d. F) L

    / Z& ~  s7 p6 D暂时就到这里吧,接下去要不要继续聊引出来的概念和问题呢?$ a) X! A5 q: q, ?8 p& R
    8 \/ \( |% _5 h' t8 V" ^4 r4 g3 S
    **什么叫做Conjecture?
    4 e6 w. Z& D$ {& e**约瑟夫斯问题。

    评分

    参与人数 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)6 q# ?4 H: f+ s$ `9 {

    % J0 U% h9 m. {猜想(conjecture)是一个看上去是真的,但尚未被证明的叙述。比如说上面提到的数学数列,因为它表现的没有规律和无限性,基于观察的某些结论,如果不能用科学逻辑的方法来证明在无限的未来它都是真的,那么之前所观察到的所有事实都仅仅是看上去是正确的。
    ' x0 e' `2 ^( e9 Z" _9 s+ V4 i; @) {" H" }# z
    当猜想被证明后,它便会成为定理。猜想一日未成为定理,数学家都要小心在逻辑结构之中使用这些猜想。% c. E1 i+ l" }" }  ?1 v' e

    $ R3 ?! P. d* j' Z猜想主要因为类比推理和偶然发现的巧合而出现。数学家通常会使用不完全归纳法,来测试自己的猜想。例如费马曾经根据首四个费马数是素数,便猜想所有费马数都是素数(此猜想已被推翻)
    ' ^9 J' W7 H. M! ?# d2 q. O. q  _  H8 s0 M) W4 H/ h1 T
    假说(Hypothesis),即指按照预先设定,对某种现象进行的解释,即根据已知的科学事实和科学原理,对所研究的自然现象及其规律性提出的推测和说明,而且数据经过详细的分类、归纳与分析,得到一个暂时性但是可以被接受的解释。任何一种科学理论在未得到实验确证之前表现为假设学说或假说。
    3 V/ w5 v. }( p) k% ?+ k, t3 J- ?- j! y# t- y- i6 h/ P
    有的假设还没有完全被科学方法所证明,也没有被任何一种科学方法所否定,但能够产生深远的影响。如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 编辑 8 Z) \& Q* }* ^0 U1 o/ s
    - G+ P5 n, C. |; t
    **约瑟夫斯问题    都教授
    9 h* [# H# S- X. e& y5 R% y! Q" ^( F- @
    我们来聊聊约瑟夫斯问题。
    + L6 {) y$ Z: K1 f1 ^* [" \, b
    6 A. P) p8 W) e! T" [% d" Q1 Z有n个囚犯站成一个圆圈,准备处决。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。
    , E4 j" d) m) J6 Y* Q2 X& Q1 M9 J
    : R& q1 U- z2 p问题是,给定了n和k,一开始要站在什么地方才能避免被处决?- ^, ~: [! j9 q' R4 w

    $ `& `" |! \# F+ p/ f% y; O  G8 g, Z6 N$ k0 N+ L% r
    ---------------------------------------不思考的分割线---------------------------------------------) K( i' W2 z) l" L
    据说这个问题是一个经常出现在计算机算法中的问题,不过当年我读书的时候对它并没有特别注意。在计算机编程的算法中,类似问题又称为约瑟夫环。老兵和神牛肯定比我清楚得多。我就不多说什么算法了。牛教授 兵教授  
    1 `4 g- L$ b2 B! h: {
    / t2 G$ u& f' M/ e& i) l  d/ p# R---------------------------------------历史八卦的分割线----------------------------------
    % M; H) G9 w' ^这个问题是以弗拉维奥·约瑟夫斯命名的,他是1世纪的一名犹太历史学家。; p0 ^9 o" O3 B$ J: p" S' j+ ?
    据载,他在自己的日记中写道,他和他的40个战友被罗马军队包围在洞中。他们讨论是自杀还是被俘,最终决定自杀,并以抽签的方式决定谁杀掉谁。约瑟夫斯和另外一个人是最后两个留下的人。约瑟夫斯说服了那个人,他们将向罗马军队投降,不再自杀。约瑟夫斯把他的存活归因于运气或天意。   

    该用户从未签到

    5#
    发表于 2014-7-17 09:30:00 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 06:50 3 V* L6 b' H% {
    **约瑟夫斯问题    都教授
    * z! Q0 Z6 K  D3 F4 r+ }
    # `- e4 U, |' R) D- |我们来聊聊约瑟夫斯问题。

    $ p/ ~6 R  m' g8 S; x1 [1. 经过努力学习,这题我能用java编程做了,oh yeah!
    1 U1 h  F) N. G  m  I1 H$ A* e
    / `9 x6 r% {  M1 t  r  s: M# W5 M/ n2. 但叶子问我的不是编程。对于给定的k,我可以用倒推法硬推。但是,想了半天也没有想到不用推的直接算法。( f( G8 Y$ d9 N& J/ V! w2 {( a' z7 h/ V

    : p6 q$ F+ T1 s$ O/ B4 M! F推的方法如下:
    . l) w; [1 I; [! W4 x( }  t8 [9 ~* ?  h8 p0 d
    n=1,就一号,跑不掉的+ E1 E- f( j; {, b8 c5 ]$ b
    n=2, 要站 (k+1) 模 n 那一号设a(2),比如 k=2, 则 a2=1 (号); 若 k=3, 则 a2=2
    , u0 `" k* n$ [; B% s如此类推,n=i 时,要站在 a(i-1)+k 模 n 那一号。比如,k=6, n=19 时 要站在14号。
    % X+ k$ \, \# H4 {% A- v; O1 B/ N1 }1 y4 e
    # K3 J  ^) J9 v) w
    我算到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 编辑
    / Y, H7 W7 ?5 O! _3 `& T
    独角兽 发表于 2014-7-16 20:30 0 Z2 O+ i; J& \) T
    1. 经过努力学习,这题我能用java编程做了,oh yeah!) Z* b4 ?8 d. V  q  z  p

    + I& J' K. D+ H8 z2. 但叶子问我的不是编程。对于给定的k,我可以用 ...

    ( X7 j" d/ U( `  J8 v! O
    * H& D; R5 V- a: z, C! @% O8 ?兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看& B+ a  ~6 T$ {+ [$ E9 _& @$ y
    # J  I' I1 I# B# O3 D0 a! Q- T
    在维基上看到K=2的解法和还有K≠2的通用解法,这里摘抄过来那段关于n的有趣分析。
    ) H# f# L; n, X5 R9 s' E7 ?6 \, v
    % @/ I- R& G+ c9 p( B还有下面我抄了两个通用算法,那个java的是不是和你做的一样啊?. R) k6 \# a. t8 A. s

    ) R6 ^# z! [1 Y* i% [( p% i, o-----------------------------不动脑筋的分割线--------------------------; [' ]% g" r0 @3 x
    $ i3 w+ a8 j( }# Y. z" o; W) Q# T
    一个小心翼翼的Java例子:
    ' W9 {  v; a  f' q/ V& ]7 L8 @0 o! Z
    , x- B1 Z8 E  d( \ int josephus(int n, int k) {
    : E3 y, c/ ~) V& I9 M# N        return josephus(n, k, 1);
    6 e6 o6 `( Y1 t) o' s  }9 t$ K, V3 r# |6 K# K" _# B
      int josephus(int n, int k, int startingPoint) {: I- ?, k; A9 D5 k
          if(n == 1)
    * i  Q' n$ I; U. V3 }+ J2 T3 S! S7 c          return 1;
    4 k- v3 o& K8 f      int newSp = (startingPoint + k - 2) % n + 1;
    9 n/ K1 ]) P! S+ A8 q( V- _* r$ t ! H$ N. P3 R/ P9 V# N
          int survivor = josephus(n - 1, k, newSp);4 H! _4 Z6 d9 x5 D: D9 N
          if (survivor < newSp) {
      q6 r, Y( x( F# J2 I% M          return survivor;
    1 f- u3 e/ m8 P5 w7 K      } else% ]3 n- ]8 h7 }) `
              return survivor + 1;
    4 C6 o* M7 h- g. j% L4 q  }# ]: `! O% D! @; h# e0 D/ W
    * r2 q' {# ?' W2 E
    另外有个更简洁的例子4 e0 a5 i6 J9 \' B9 C5 \! Y
      def josephus(n, k):
    - B" {' t0 m- A, O% f1 f    if n ==1:
    . G; R% B& r! q! M* O      return 1' k8 |& j; h0 G( [* j
        else:
    9 f0 y3 \) w$ r. D      return ((josephus(n-1,k)+k-1) % n)+1# v4 g* W0 O6 j: {" Y. M

    ' S/ I, E& g" x' E6 c(如果n这个数字很大很大,k很小很小,电脑会不会转晕过去呢?)
    2 I$ G7 w0 f, ~$ y. h
    # S6 M: B% K3 p: L' f. b以上摘自 http://en.wikipedia.org/wiki/Josephus_problem#Solution
    7 A1 l1 [6 y0 I9 _3 w
    ' N% Z% l2 k/ ?) @: I7 p
    1 f% T3 X: l6 y9 s关于n的分析:0 i) G4 D  t/ i6 [
    设f(n)为一开始有n个人时,生还者的位置。! }7 ]+ E+ ~+ y) W4 \
    如果一开始有偶数个人,则第二圈时位置为x的人一开始在第2x - 1个位置。因此位置为f(2n)的人开始时的位置为2f(n) - 1。这便给出了以下的递推公式:7 k/ X; U- u, g+ [! \( L0 [( d% M4 P

    # [9 ?  I$ E+ i7 t6 bf(2n)=2f(n)-1
    ) W6 p* Q+ g, x& ^  P如果一开始有奇数个人,则走了一圈以后,最终是号码为1的人被杀。于是同样地,再走第二圈时,新的第二、第四、……个人被杀,等等。在这种情况下,位置为x的人原先位置为2x+1。这便给出了以下的递推公式:( m1 w; n" U* n2 Y

    7 \0 U5 L6 b! xf(2n+1)=2f(n)+14 [! T5 N% b" W+ W5 U( x3 D* ~
    7 ?: P% Q8 S7 w
    7 `8 G2 d# p2 ^! y& ]
    如果我们把n和f(n)的值列成表,我们可以看出一个规律:
    ( t% M8 u" F* X: O7 j4 @+ S
    1 t+ a' d' ]  g; @0 Pn    1    2        3        4        5        6        7        8        9        10        11        12        13        14        15    162 g9 m+ q$ I& ^8 K- T4 e
    f(n) 1    1        3        1        3        5        7        1        3        5        7        9        11        13        15        1" |) N. X+ g0 l1 y+ E) C" \. W
    - H* Z, r% x- V
    从中可以看出,f(n)是一个递增的奇数数列,每当n是2的幂时,便重新从f(n)=1开始。因此,如果我们选择m和l,使得n=2^m+l且0≤ l<2^m,那么f(n)=2 . l+1。显然,表格中的值满足这个方程。可以用数学归纳法给出一个证明。
    2 ~8 `6 w: k" C- n+ R( P: _7 R6 W4 Y, t, T. Z" ]
    定理:如果n=2^m+l且0≤ l<2^m,则f(n) = 2.l+1。, D$ b4 Q; ^5 i3 G2 W
    + m) @3 q7 R; ?% ^4 E2 E* [! C3 k' k
    # [, h- v; u7 W8 ?0 N, `& ~
    答案的最漂亮的形式,与n的二进制表示有关:把n的第一位移动到最后,便得到f(n)。这可以通过把n表示为2^m+l来证明。

    该用户从未签到

    7#
    发表于 2014-7-17 11:19:06 | 只看该作者
    到处停留的叶子 发表于 2014-7-17 11:02 * r' B6 l% g. o7 c. p& s
    兽兽真是爱动脑筋啊~~我现在遇到这类问题第一想到的是打电话找高手解答,或者先在网上找找看+ }" u' v& \. L* C$ a3 A% l* J

    3 _- o) p5 }# R( J4 D$ ~在 ...

    0 g) B& z0 E! u+ ^我的推法就是这个:
    2 n5 H6 B4 k) y. X6 H- i: l
    , J/ i2 {( K; ~  return ((josephus(n-1,k)+k-1) % n)+1; i$ M4 G& t( b8 k' W- ]' w% F% h# @1 m

    5 ~# v' W- a5 Z/ A0 X我有一点疏忽是如果整除,模的结果是0,但实际应该取n。所以这个表达式把 "+1"搞到括号外面就完全对了。
    5 E: G4 B- h, h& q9 x1 N3 G/ V$ G6 A. x; R6 n# g( G9 ]
    2的情况我没单拿出来搞。
  • TA的每日心情
    慵懒
    2020-5-10 00:00
  • 签到天数: 1237 天

    [LV.10]大乘

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

    [LV.Master]无

    9#
    发表于 2014-7-18 22:40:37 | 只看该作者
    看不懂
    1 M" g: A6 B. d0 V1 M+ J  {不过今天不幸运数是17
  • TA的每日心情
    擦汗
    2020-3-23 00:29
  • 签到天数: 134 天

    [LV.7]分神

    10#
     楼主| 发表于 2014-7-19 03:04:00 | 只看该作者
    常挨揍 发表于 2014-7-18 09:40 . {. L0 m4 u: A# M( [
    看不懂( H1 Y' H! X  }! _( |; j
    不过今天不幸运数是17

    * \) O. H. ]8 J7月17日成了一个黑色的日子。很让人感觉生命无常。3 f8 D( {' r7 L% `4 [. u3 N1 g
    9 {( c: ]( \4 y# `! h+ x7 }. r6 L
    以后出行挑日子,要找一个幸运数的交集,这里前面的9个数字也可以参考一下:1,3,7,9,13,15,21,25,31
    ! C" U, q! f; O! Q& {) l& B9 P" N- f+ A; u
    13号如果遇上星期五,还是算了,不要不信邪。

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

    GMT+8, 2024-11-22 23:16 , Processed in 0.045085 second(s), 23 queries , Gzip On.

    Powered by Discuz! X3.2

    © 2001-2013 Comsenz Inc.

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