数学故事—约瑟夫问题与因式分解

合集下载

抽杀问题-约瑟夫问题

抽杀问题-约瑟夫问题

[阅读材料]世界名题与小升初之:抽杀问题(約瑟夫问题)--马到成功老师在各类竞赛中,各类小升初考试中相关的世界名题出现的概率极高,这是由小升初与数学竞赛的特点决定,这特点便是:知识性,趣味性,思想性相结合。

先给大家介绍这一问题的由来。

据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特後,39 個犹太人与Josephus及他的朋友躲到一個洞中,39個犹太人決定宁愿死也不要被人抓到,于是決定了一个自杀方式,41個人排成一个圆圈,由第1個人开始报数,每报数到第3人该人就必須自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。

然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他將朋友与自己安排在第16個与第31個位置,于是逃过了这场死亡游戏。

解法約瑟夫问题可用代数分析來求解,将这个问题扩大好了,假设现在您与m个朋友不幸参与了这个游戏,您要如何保护您的朋友?只要画两个圆圈就可以让自己与朋友免于死亡游戏,这两个圆圈是排列顺序,而外圈是自杀顺序,如下图所示:使用程式来求解的话,只要将阵列当作环状来处理就可以了,在列中由计数1开始,每找到三个无资料区就填入一个计数,直接计数來求解的話,只要將阵列当作环状来处理就可以了,在阵列中由計数1开始,每找到三个无资料区就填入一个計数,直而計数达41为止,然后將阵列由索引1开始列出,就可以得知每个位置的自杀順序,这就是約瑟夫排列,41個人报数3的約瑟夫排列如下所示:14 36 1 38 15 2 24 30 3 16 34 4 25 17 5 40 31 6 18 26 7 37 19 8 35 27 9 20 32 10 41 21 11 28 39 12 22 33 13 29 23由上可知,最后一個自杀的是在第31个位置,而倒数第二个自杀的要排在第16个位置,之前的人都死光了,所以他们也就不知道約瑟夫与他的朋友并没有遵守游戏规则了。

约瑟夫环问题(Josephus)

约瑟夫环问题(Josephus)

算法设计
Josephus jp=new Josephus(); int a[]=new int[n]; for(int i=0;i<n;i++){ a[i]=i+1; } jp.SortArray(a,n,m,k,g); } public void show(int[]b,int g){ for(int i=b.length-g;i<b.length;i++){ System.out.print(b[i]+" "); } }
• b[c]=a[i]; • a[i]=0; • c++; • if(c==n) break; • } • System.out.print(“最后出列的 3人: "); • this.show(b,g); • } • }
• 1.数据选择: 要求:n<2^15; 1<=k<=n; 2.数据和结果显示:
(3)当然其中还是会存在一些漏洞,需要进 一步的改进。在计算机中是容不得丝毫的 错误的,这也让我们学到了面对科学要持 有严谨的态度,否则必定得不到应该有的 结果。
总人数n 起始号码k 循环数m 最后出列的3人 总人数n 起始号码k 循环数m 最后出列的3人 总人数n 起始号码k 循环数m 最后出列的3人 48 6 15 47 21 46 105 73 4 87 32 21 300 80 12 70 296 198 总人数n 起始号码k 循环数m 68 34 25
输出格式:
T行最后min(n,3)个出列的编号。 结果:6 1 5
问题背景
• 这个问题是以弗拉维奥•约瑟夫斯命名的, 它是1世纪的一名犹太历史学家。他在自己 的日记中写道,他和他的40个战友被罗马 军队包围在洞中。他们讨论是自杀还是被 俘,最终决定自杀,并以抽签的方式决定 谁杀掉谁。约瑟夫斯和另外一个人是最后 两个留下的人。约瑟夫斯说服了那个人, 他们将向罗马军队投降,不再自杀。

数学故事—约瑟夫问题与因式分解

数学故事—约瑟夫问题与因式分解

数学故事——约瑟夫问题与因式分解有一个古老的传说,有64名战士被敌人俘虏了,敌人命令它们排成一个圈,编上号码1,2,3,……64。

敌人把1号杀了,又把3号杀了,他们是隔一个杀一个这样转着圈杀。

最后剩下一个人,这个人就是约瑟夫,请问约瑟夫是多少号?
这就是数学上有名的“约瑟夫问题”。

给大家一个提示,敌人从l号开始,隔一个杀一个,第一圈把奇数号码的战士全杀死了。

剩下的32名战士需要重新编号,而敌人在第二圈杀死的是重新编排的奇数号码。

按照这个思路,看看你能不能解决这个问题?
(答案)
由于第一圈剩下的全部是偶数号2,4,6,8,……64。

把它们全部用2除,得1,2,3,4,……32.这是第二圈重新编的号码。

第二圈杀过之后,又把奇数号码都杀掉了,还剩下16个人。

如此下去,可以想到最后剩下的必然是64号。

64=2×2×2×2×2×2,它可以连续被2整除6次,是从1到64中质因数里2最多的数,因此,最后必然把64号剩下。

从64=2×2×2×2×2×2还可以看到,是转过6圈之后,把约瑟夫斯剩下来的。

浙教版数学八下课件2.2一元二次方程的解法(一)(20张)

浙教版数学八下课件2.2一元二次方程的解法(一)(20张)

因式分解法解一元二次方 (1程)的将基方程本变步形骤,:使方程的右边为零;
(2)将方程的左边因式分解; (3)根据若A·B=0,则A=0或B=0,将解一元二次方程转
化为解两个一元一次方程;
例3、解方程 x2 2 2x 2 解: 移项,得 x2 2 2x 2 0 即 x2 2 2x ( 2)2 0
2x+3=0,或2x-3=0.
解得x1=- ,x2=
结论: 若A×B=0,则 A=0或B=0。
请利用上面的结论解方程:
例1:解下列方程:
1 x2 3x 0
2 25x2 16
像上面这种利用因式分解解一元二 次方程的方法叫做因式分解法。
它的基本步骤是:
*若方程的右边不是零,则先移项,使方程的右
x(3x 17) 0
x 0 ,或3x 17 0
解得
x1

0,x2

17 3
(2)移项,得
(3x 4)2 (4x 3)2 0
方程左边因式分解,得
(3x 4)(4x 3)(3x 4)(4x 3) 0
即 (7x 7)(x 1) 0
分解因式的结果为____________________.
作业:
1.配套作业本 2.课后检测
7x - 7 0 ,或 - x 1 0
解得 x1 1,x2 -1
能用因式分解法解一元二次方程遇到类似例2这样的,移项后能直 接因式分解就直接因式分解,否则移项后先化成一般式再因式分解.
用因式分解法解下列方程:
(1) 4x2=12x; (2) (x -2)(2x -3)=6; (3) x2+9=-6x ; (4) 9x2=(x_1)2

具体数学笔记-约瑟夫问题

具体数学笔记-约瑟夫问题

具体数学笔记-约瑟夫问题据说著名犹太历史学家Josephus有过以下的故事:在罗马⼈占领乔塔帕特后,39 个犹太⼈与Josephus及他的朋友躲到⼀个洞中,39个犹太⼈决定宁愿死也不要被敌⼈抓到,于是决定了⼀个⾃杀⽅式,41个⼈排成⼀个圆圈,由第1个⼈开始报数,每报数到第3⼈该⼈就必须⾃杀,然后再由下⼀个重新报数,直到所有⼈都⾃杀⾝亡为⽌。

然⽽Josephus和他的朋友并不想遵从。

⾸先从⼀个⼈开始,越过k−2个⼈(因为第⼀个⼈已经被越过),并杀掉第k个⼈。

接着,再越过k−1个⼈,并杀掉第k个⼈。

这个过程沿着圆圈⼀直进⾏,直到最终只剩下⼀个⼈留下,这个⼈就可以继续活着。

问题是,给定了和,⼀开始要站在什么地⽅才能避免被处决?Josephus要他的朋友先假装遵从,他将朋友与⾃⼰安排在第16个与第31个位置,于是逃过了这场死亡游戏。

现在考虑k=2时的问题,我们设J(n)表⽰当有n个⼈时幸存者的编号。

假设⼀开始有2n个⼈,那么⼀轮后会剩下1,3,5,7...2n−1,并且⼜是从1开始跳。

所以J(2n)=2J(n)−1奇数的情况差不多,会剩下3,5,7,9....2n+1所以J(2n+1)=2J(n)+1⽤这个⽅法可以在log2n的时间内求出J(n)接下来我们可以打⼀个表容易发现J(2m+l)=2l+10≤l<2m⽤数学归纳法很容易证。

⾄此这个问题已经解决,但我们还可以发现⼀些东西。

设n的⼆进制展开为n=(b m b m−1...b1b0)2b m=1把2l+1表⽰出来2l+1=(b m−1...b1b01)2这就是n在⼆进制下向左循环移动了⼀位。

难道是碰巧吗?考虑这个递推式的⼀般形式f(1)=af(2n)=2f(n)+bf(2n+1)=2f(n)+ca,b,c显然是互不影响的,f(n)⼀定可以这样表⽰出来f(n)=A(n)a+B(n)b+C(n)c可以看出对于所有的a,b,c,A,B,C都是相同的我们取a=1,b=c=0f(n)=A(n)A(1)=1A(2n)=2A(n)A(2n+1)=2A(n)则A(2m+l)=2m接下来我们反过来使⽤递推式,确定f(n),研究是否有a,b,c能表⽰它,取f(n)=1解得a,b,c=(1,−1,−1)−−−−−>A(n)−B(n)−C(n)=f(n)=1再取f(n)=n就可以解出A,B,C了。

小学趣味数学故事之约瑟夫问题

小学趣味数学故事之约瑟夫问题

小学趣味数学故事之约瑟夫问题
数学中的一些美丽定理具有这样的特性: 它们极易从
事实中归纳出来, 但证明却隐藏的极深.下面是为大家收集的趣味数学故事之约瑟夫问题,供大家参考。

有一个古老的传说,有64名战士被敌人俘虏了,敌人命令它们排成一个圈,编上号码1,2,3,……64。

敌人把1号杀了,又把3号杀了,他们是隔一个杀一个这样转着圈杀。

最后剩下一个人,这个人就是约瑟夫,请问约瑟夫是多少号?
这就是数学上有名的“约瑟夫问题”。

给大家一个提示,敌人从l号开始,隔一个杀一个,第一圈把奇数号码的战士全杀死了。

剩下的32名战士需要重新编号,而敌人在第二圈杀死的是重新编排的奇数号码。

按照这个思路,看看你能不能解决这个问题?
答案解析:
由于第一圈剩下的全部是偶数号2,4,6,8,……64。

把它们全部用2除,得1,2,3,4,……32.这是第二圈重新编的号码。

第二圈杀过之后,又把奇数号码都杀掉了,还剩下16个人。

如此下去,可以想到最后剩下的必然是64号。

64=2×2×2×2×2×2,它可以连续被2整除6次,是从1
到64中质因数里2最多的数,因此,最后必然把64号剩下。

从64=2×2×2×2×2×2还可以看到,是转过6圈之后,把约瑟夫斯剩下来的。

约瑟夫问题

约瑟夫问题

约瑟夫问题简介约瑟夫问题是一个经典的数学问题,由弗拉维奥·约瑟夫斯(Josephus Flavius)所提出。

问题的背景是:在一个固定长度的圆桌周围围坐着n个人,从第一个人开始报数,报到m的人出圈,然后从下一个人开始重新报数,直到剩下最后一个人。

问题是,给定n和m,求最后剩下的人的编号。

解法暴力破解法最直观的解法是使用循环和数组来模拟这个过程。

首先,我们用一个数组来表示这些人的编号,例如[1, 2, 3, ..., n]。

然后我们在循环中模拟报数的过程,每次报到m的人就从数组中删除。

当数组中只剩下一个元素时,就找到了最后剩下的人。

def josephus(n, m):people = list(range(1, n +1))idx =0while len(people) >1:idx = (idx + m -1) % len(people)people.pop(idx)return people[0]这种解法的时间复杂度为O(n*m),并且在n很大的情况下,性能会变得很差。

数学公式法约瑟夫问题其实存在一个更巧妙的解法,不需要模拟整个过程,而是通过数学公式来直接计算出最后剩下的人的编号。

如果我们将问题的规模缩小为n-1,即在一个长度为n-1的圆桌上进行同样的操作,求出的结果为f(n-1, m)。

然后我们将这个结果映射到原始问题的编号上,即将f(n-1, m)变为f(n, m)。

计算f(n, m)的过程如下: - 首先,我们将f(n, m)映射到f(n-1, m)上。

假设f(n, m) = x,那么f(n, m)在映射到f(n-1, m)上的过程中,每次都将整个序列向后移动m 位,即f(n, m)在映射到f(n-1, m)上的过程中,原来的第x个元素变成了第x+m个元素。

因此,f(n-1, m) = (x + m) % n。

- 其次,我们将f(n-1, m)映射回f(n, m)上。

约瑟夫问题多种解决方法

约瑟夫问题多种解决方法
1
著名约瑟夫问题一
• 17世纪的法国数学家加斯帕在《数目的游戏问题》中讲了 这样一个故事:15个教徒和15 个非教徒在深海上遇险, 必须将一半的人投入海中,其余的人才能幸免于难,于是 想了一个办法:30个人围成一圆圈,从第一个人开始依次 报数,每数到第九个人就将他扔入大海,如此循环进行直 到仅余15个人为止。问怎样排法,才能使每次投入大海的 都是非教徒。题目中30个人围成一圈,因而启发我们用一 个循环的链来表示。可以使用结构数组来构成一个循环链。 结构中有两个成员,其一为指向下一个人的指针,以构成 环形的链;其二为该人是否被扔下海的标记,为1表示还 在船上。从第一个人开始对还未扔下海的人进行计数,每 数到9时,将结构中的标记改为0,表示该人已被扔下海了。 这样循环计数直到有15个人被扔下海为止
约瑟夫问题的另外一个有名的例子
• 一堆猴子都有编号,编号是1,2,3 ...m , 这群猴子(m个)按照1-m的顺序围坐一圈, 从第1开始数,每数到第N个,该猴子就要 离开此圈,这样依次下来,直到圈中只剩 下最后一只猴子,则该猴子为大王。
• 二. 基本要求: (1) 输入数据:输入 m,n m,n 为整数,n<m (2)中文提示 按照m个猴子,数n 个数的方法,输出为大 王的猴子是几号 ,建立一个函数来实现此 功能
12
• p2->next=p1; • p2=p1; •} • p2->next=head; • return head; •} • struct monkey *findout(struct monkey *start,int
n) •{ • int i; • struct monkey *p; • i=n; • p=start;
• cout<<"----------------------------------------
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数学故事200字数学故事——约瑟夫问题与因式分解有一个古老的传说,有64名战士被敌人俘虏了,敌人命令它们排成一个圈,编上号码1,2,3,……64。

敌人把1号杀了,又把3号杀了,他们是隔一个杀一个这样转着圈杀。

最后剩下一个人,这个人就是约瑟夫,请问约瑟夫是多少号?
这就是数学上有名的“约瑟夫问题”。

给大家一个提示,敌人从l号开始,隔一个杀一个,第一圈把奇数号码的战士全杀死了。

剩下的32名战士需要重新编号,而敌人在第二圈杀死的是重新编排的奇数号码。

按照这个思路,看看你能不能解决这个问题?
(答案)
由于第一圈剩下的全部是偶数号2,4,6,8,……64。

把它们全部用2除,得1,2,3,4,……32.这是第二圈重新编的号码。

第二圈杀过之后,又把奇数号码都杀掉了,还剩下16个人。

如此下去,可以想到最后剩下的必然是64号。

64=2×2×2×2×2×2,它可以连续被2整除6次,是从1到64中质因数里2最多的数,因此,最后必然把64号剩下。

从64=2×2×2×2×2×2还可以看到,是转过6圈之后,把约瑟夫斯剩下来的。

相关文档
最新文档