数学实验之五---素数
大学数学实验报告----迭代(一)——方程求解
Do M n , n, 2, 100
运行结果:
M n_Integer : Module y, k , m 2; k m ^ n 1 ;
x Mod k, n ;
Print n, " ", PrimeQ n , " ", x, "
", GCD m, n
Do M n , n, 2, 100
2 True 0 2 3 True 1 1 4 False 0 2 5 True 1 1 6 False 2 2 7 True 1 1 8 False 0 2 9 False 4 1 10 False 2 2 11 True 1 1 12 False 8 2 13 True 1 1 14 False 2 2 15 False 4 1 16 False 0 2 17 True 1 1 18 False 14 2 19 True 1 1 20 False 8 2 21 False 4 1 22 False 2 2 23 True 1 1 24 False 8 2 25 False 16 1 26 False 2 2 27 False 13 1 28 False 8 2 29 True 1 1 30 False 2 2 31 True 1 1 32 False 0 2 33 False 4 1 34 False 2 2 35 False 9 1 36 False 32 2 37 True 1 1 38 False 2 2 39 False 4 1 40 False 8 2
99 False 3 27 100 False 1 67 Null2
m=4 时
输入程序:
M n_Integer : Module y, k , m 4; k m ^ n 1 ; x Mod k, n ; Print n, " ", PrimeQ n , " ", GCD m, n , " ", x Do M n , n, 2, 100
数学实验之素数
素数探秘一、实验目的素数(Prime)是构造所有数的“基本材料”,犹如化学上的化学元素和物理学中的基本粒子,有关素数的许多看似简单却极富刺激性的奇妙问题,向一代代数学家提出了挑战,始终吸引着他们的目光.本实验通过对若干素数问题的基本认识,激发学生对数论中研究课题的兴趣,并体会探索数学奥妙的艰巨性.二、实验内容1素数的判别欧几里得给出素数的定义:如果一个大于1的自然数只能被1及它本身整除,则称该数为素数. 否则称为合数(1即不是素数也不是合数).(1) Mathematica的素数函数与筛法Mathematica系统提供了两个常用的与素数有关的函数:Prime[n]返回从第一个素数2数起的第n个素数.PrimeQ[n] 判断自然数n是否为素数,是则返回True,否则返回False.例如,要输出第25个素数并判断67013是否为素数,输入{Prime[25],PrimeQ[67021]}输出结果为{97,True}.使用系统函数输出某个指定范围内的所有素数,只要定义如下的函数即可.bprime[m_Integer,n_Integer]:=Select[Table[k,{k,m,n}],PrimeQ]例如,要输出100—115之间的素数,这些上面的命令后,输入bprime[15,30]输出结果为{101,103,107,109,113}最早人们是如何寻找素数呢?2000多年前,希腊学者埃拉托色尼(Eratosthenes 公元前约284-192年)给出了一个寻找素数的简便方法—筛法:写下从2、3、…、N,注意到2是一个素数,划去后面所有2的倍数,越过2,第一个没有被划去的数是3,它是第二个素数,接下来再划掉所有3的倍数,3之后没有被划去的数是5,然后再划掉除5外所有5的倍数,以此类推. 显然,划掉的都是较小整数的倍数,它们都不是素数,都被筛掉了. 而素数永远不会被筛掉,它们就是要寻找的不超过N的所有素数.问题1 编写一个利用筛法寻找素数的程序,并输出2—100内的所有素数.解输入Sieve[n_Integer]:=Module[{t,i,temp},t=Range[2,n];For[i=2,i<=Floor[Sqrt[n]],i++,t=Select[t,Mod[#,i]!=0&];If[PrimeQ[i],t=Prepend[t,i]]];Sort[t]]Sieve[100]执行后输出100以内的25个素数:{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97}(2) 素数判断判断一个正整数n 是否是素数,只要将n 分别除以2n 都不能被整除,则n 为素数. 这种判断一个整数是否为素数的方法,称为试除法,我们作下面的实验:问题2 自定义一个用试除法判断素数的函数,判断67021是否是素数.解 将n 分别除以2n 都不能被整除,则2mod(, )0i n i =≠,其中,为. 下面的素数判断函数,当n 是素数,返回“True ”;若不是素数,返回“False ”. 输入 Prnum[n_Integer]:=If[Product[Mod[n ,i],{i,2,Floor[Sqrt[n ]]}]!=0,True,False]Prnum[67021]执行后得到True.问题3 输出某个指定范围内的所有素数.解 可以定义如下的函数 BetweenPrime[m_Integer,n_Integer]:=Module[{t ={}},For[k =m ,k <=n ,k ++,If[Product[Mod[k ,i ],{i ,2,Floor[Sqrt[k]]}]==0,Continue[],t =Append[t ,k ]]];t ]BetweenPrime[50,100]执行后得到{53,59,61,67,71,73,79,83,89,97}(3) 素数的无穷性关于素数首先提出的问题是有没有最大的素数,或者素数是否有穷尽?欧几里得在《几何原本》中提出如下命题:“素数的数目大于任何指定的素数集合中的素数的数目”. 即任何有限的素数集合都不可能包含全部的素数,素数有无穷多.欧几里得使用非常优美的数学推理方法证明了这个命题. 首先,设所有的素数按照自小到大的次序列成:12n p p p <<<, (1) 证明的诀窍在于研究数:121n N p p p =+. (2)显然,n N p >. 若N 是一个素数,则说明在n p 之后确实还有一个素数,它不属于原有的素数集合. 另一方面,若N 是一个合数,则它必定能够被某个素数整除,不妨设这个素数为p ,由于N 除以 (1,2,,)i p i n =所得的余数都是1,所以,素数p 必为不同于各个i p 的另一个素数. 因此,不论N 是否是素数,我们总能找到一个新素数. 例如对3,7,13,371312742137N =⋅⋅+==⋅,137是一个新素数.问题4 计算121n n N p p p =+,3,4,n =,判断它们是否是素数,如果不是素数,求出其素因子. 解 为使程序简单起见,假定 (1,2,,)i p i n =为前n 个素数,输入Pnum[n_Integer]:=Module[{s =2,t ={}},For[i =2,i<=n,i ++,s *=Prime[i];t =Append[t,Apply[Times,s]+1]];GridBox[Transpose[{t ,PrimeQ/@t ,FactorInteger/@t }],RowLines →True,ColumnLines →True]//DisplayForm ]为了使得输出结果便于观察,程序中使用GridBox[]函数. 取一个较小的n ,如n =8,调用上述程序得到Pnum[8] //DisplayForm 7True7,131True31,1211True211,12311True2311,130031False59,1,509,1510511False19,1,97,1,277,9699691False 347,1,27953, 从输出结果看到前四个结果2317⋅+=,…,23571112311⋅⋅⋅⋅+=都是相应素数集合之外的新素数,而接下来的23571113130031⋅⋅⋅⋅⋅+=等三个数都是个合数,30031的两个素因子59和509都是新素数.2 素数公式与梅森素数(1) 多项式形的素数生成公式利用上述方法判断一个整数是否是素数以及寻找新的素数,对于不太大的n ,看起来并不难. 但是,要判断一个非常大的数是否是素数,可就不简单了. 人们一直试图找到一个能生成所有素数的公式,十七世纪 法国数学家费马(Fermat )曾断言,对任意正整数n ,221n n F =+永远是一个素数. 不难计算对4n ≤,费马的推测确实是正确的. 1732年欧拉提出反例,指出325216416700417F =+=⨯是一个合数,费马的断言是错误的. 此后,有人甚至推断当5n ≥,n F 都是合数.1772年欧拉给出了一个公式,对于整数n ,多项式的值是素数. 然而这个推断也是错误的,事实上,当40n =时,2240404141++=不是素数.计算发现多项式241n n -+、217n n ++(勒让德Legendre )、272491n n ++等,对于某些整数,其值为素数,对于另一些整数,其值为合数.问题5 计算241n n ++,0,1,50n =,判断对于哪些n (n 可取负整数)它们是素数,如果不是素数,求出其素数因子.解 输入f[x_Integer]:=x ^2+x +41Table[{k ,f[k ],PrimeQ[f[k ]],FactorInteger[f[k ]]},{k,0,50}]//ColumnForm执行后得到(仅列出部分输出结果){0,41,True ,{{41,1}}}...........................{39,1601,True ,{{1601,1}}}{40,1681,False,{{41,2}}}{41,1763,False,{{41,1},{43,1}}}...........................{49,2491,False ,{{47,1},{53,1}}}{50,2591,True ,{{2591,1}}}(2) 梅森素数历史上,关于梅森素数的研究也是用公式寻找素数的一个实例:1644年法国神父梅森(M .Mersenne )指 出,对于素数p =2,3,5,7,13,17,19,31,67,127和257,21p -都是素数,而对于其它小于257的素数p ,21p -都是合数. 后来证明梅森的这个推断并不正确,但在17世纪时能得出这一结论,也实属不易. 如今我们把形如21n -的数称为梅森数,若p 为素数且21p -也是素数,称为梅森素数,记为21p p M =-.对任何素数p ,如何判断p M 是不是素数?1930年数学家卢卡斯(E .Lucas )和莱默(D .Lehmer )提出一个有效的检验法:设p 3≥为一个素数,检验法的伪代码为:赋值:4s =;循环变量i 从3到p ,计算2: 2 mod 21p s s =--;若0s = 则21p -是素数,否则是合数. 问题6 编写一个判断p M 是否是梅森素数的程序,检验梅森的结论.解 由于23M =是显然的素数,不用检验. 定义如下检验程序: Mersenne[p_]:=Module[{s =4,t },m =2^p -1;For[i =3,i <=p ,i ++,s =Mod[s ^2-2,m ]];If[s ==0,t =True,t =False];t] (*函数的自变量p 必须是素数*)S ={3,5,7,13,17,19,31,67,127,257}Table[Mersenne[S[[k ]]],{k,Length[S]}] (*调用程序计算*)执行后得到{True ,True ,True ,True ,True ,True ,True ,False ,True ,False}由此结果知道67M 和257M 不是素数. 此外,不超过257的素数共有55个,其中p =61,89和107对应的61M 、89M 和107M 也都是素数,可惜梅森并未检索到.梅森素数是很稀少的,因为随着p 增大,21p -增长速度非常快,现在人们借助于计算机寻找21p -型的梅森素数,旨在发现最大的素数,迄今为止,仅仅找到了43个梅森素数,2005年12月美国数学家柯蒂斯·库珀发现的最大的梅森素数为3040245721-,它有9152052位数.数学家一直努力寻找生成素数的公式,但截至目前,并没有一个函数或是方程式可以有效地产生所有的素数.3 素数分布素数在自然数中的分布是很不规则的,但是人们发现,随着数的增大,素数变得越来越稀疏,十八世纪以来,素数的统计分布问题成为数学家们研究的一个重要课题,为此引进素数个数函数()x π,它是不超过实数x 的素数的个数,例如,(10)4π=,(100)25π=,()x π是一个单调增函数,由欧几里得定理x →+∞时,()x π→+∞.而欧拉又发现()lim 0x x x π→∞=.我们通过如下的实验观察这一事实.问题7 编写程序定义一个统计某个范围内素数个数的函数,计算100以内、100—200、...、900—1000之间素数的个数,再统计10000至100000内,每间隔10000的范围内的素数个数.解 定义Pinum[k_,m_]:=Module[{t =0},For[j =k ,j <=m ,j ++,If[PrimeQ[j ],t +=1]];t ];Table[Pinum[k ,k +100],{k ,0,1000,100}] (*以100为间隔的范围内素数个数*)执行后得到{25,21,16,16,17,14,16,14,15,14,16}再输入如下的命令,输出10000到100000内,每间隔10000的范围内素数的个数.Table[{k ,”-”,k +10000,r =Pinum[k ,k +10000]},{k,10000,100000,10000}]//TableForm执行后得到如下结果://TableForm10000 — 20000 103320000 — 30000 98330000 — 40000 95840000 — 50000 93050000 — 60000 92460000 — 70000 87870000 — 80000 90280000 — 90000 87690000 — 100000 879100000 — 110000 861Mathematica 系统提供了计算不超过x 的素数个数的函数:PrimePi[x] 返回不超过x 的素数个数.问题5.3.7的第二段程序若改为如下形式,输出结果完全相同. Table[{k ,r =PrimePi[k ],r /k //N },{k,10000,100000,10000}]//TableForm为了解()x π的性质,18世纪的许多数学家都试图找出一个简单的解析函数近似地表示()x π. 1792年年仅15岁的高斯,曾猜测函数()x π的渐进表达式为()x π~ln x x. (3) 后来,他又给出更精确的对数积分式()x π~2()ln x dt Li x t=⎰. (4) 法国数学家勒让德又猜测对于较大的x , ()x π~ln x x B+, (5) 其中 1.03866B =-(称为勒让德常数).关于()x π的这些猜测的理论证明,最终由两位年龄相仿的法国数学家阿达玛(J.Hadamard 1865—1963)和比利时数学家普桑(A.Poussin 1866—1962)几乎同时(于1896年)各自独立完成,由于该问题在数论中非常重要,数学家们称为“素数定理”.作为实验习题,建议读者用图示方法表达以上三个渐进表达式的逼近情况.4 有关素数的其他问题素数理论中不乏富于挑战性的、至今仍未解决的难题,我们仅列出几个供读者参考.(1) 完全数早在公元前希腊数学家发现数6有一个特性,它等于它自身因子的和:6=1+2+3. 又如28=1+2+4+7+ 14,这种数称为完全数.除了6,28之外,下一个完全数是496,如何找出其他的完全数呢?欧几里得证明了:若21n -是一个素 数,则数12(21)n n --是完全数. 这种形式的完全数显然都是偶数,称为偶完全数. 后来欧拉又证明了凡偶完全数必呈12(21)n n --的形式,其中21n -是一个素数. 据此就在完全数与梅森素数之间建立起联系,显然偶完全数也是非常稀少的.偶完全数还有一些奇特的性质:(ⅰ) 任何偶完全数的个位数字必为6或8;(ⅱ) 除6以外的偶完全数都可以表为几个连续奇数的奇数次方之和,例如332813=+,33334961357=+++;(ⅲ) 偶完全数n 的所有因子(含1和n 本身)的倒数和恒等于2.除了偶完全数外,有没有奇完全数呢?至今没有答案.(2) 孪生素数孪生素数指的是差为2的素数对,例如{3,5}、{5,7}、{11,13}、{41,43}等. 1000多年前,有人就提出了孪生素数猜想:“存在无穷多对孪生素数p和2p ”,可是至今也没人能证明它.问题8 编写程序查找一个指定范围内的孪生素数.解将指定范围内的素数顺次两两交叉分成素数组,如10以内的素数2,3,5,7,分成{2,3},{3,5},{5,7},从每对素数中找出两数之差等于-2的数对,就是问题的解.输入twinp[m_,n_]:=Module[{a,b},a=Select[Prime[Range[PrimePi[m],PrimePi[n]]],PrimeQ];b=Select[Partition[a,2,1],Subtract@@#==-2&]]twinp[300,500]执行后得到{{311,313},{347,349},{419,421},{431,433},{461,463}}(3) 哥德巴赫猜想1742年6月7日哥德巴赫写信给数学家欧拉,提出了以下猜想:任何一个不小于6的偶数,都可以表示成两个奇素数之和.例如:6=3+3,8=3+5,14=3+11,…. 这就是所谓的哥德巴赫猜想(Goldbach's Conjecture),哥德巴赫猜想是小学生都能明白的问题,其理论证明却也是数论中乃至数学中最棘手的难题,即所谓的“1+1”问题. 为证明猜想的正确性,200多年来,数学家们付出了无数的心血和劳动,至今仍未解决. 我国数学家陈景润,1966年证明了“1+2”,即“任何一个大偶数,都可以表为一个素数及二个素数的乘积之和”,是目前最接近于哥德巴赫猜想的一个结论.问题9 编写程序验证哥德巴赫猜想的正确性.解给出如下程序,程序要求输入的自变量必须取偶数值:Goldbach[n_]:=Module[{a,t={}},If[Mod[n,2]!=0,Print["n must be an even number!"]];a=Select[Prime[Range[PrimePi[n]]],PrimeQ];For[i=1,i<=Length[a]-1,i++,For[j=i+1,j<=Length[a],j++,If[a[[i]]+a[[j]]==n,t=Append[t,{a[[i]],a[[j]]}],Continue[]]]];t]对24—30的4个偶数,应用该程序验证,为输出结果便于观察,使用GridBox[]函数:p=Table[2k,{k,12,15}];GridBox[Table[{p[[i]],Goldbach[p[[i]]]},{i,Length[p]}],RowLines->True,ColumnLines->True]//DisplayForm执行后得到(仅列出部分结果)//DisplayForm245,19,7,17,11,263,23,7,19285,23,11,17307,23,11,19,13,素数理论虽然是纯数学研究的课题,看起来似乎没有什么实用价值,但是,近年来在大批量信息处理以及密码学等问题中显示其广阔的应用前景,感兴趣的可以参考有关著作.三、实验习题习题1 设12{,,,}n p p p 为一个任意的素数集合,通常称形如121n n N p p p =+的数为欧几里得数. 改写问题5.3.3的程序,试之能适应于任意n 个素数的情况,验证欧几里得定理.习题2 做实验回答下列问题:设n 为整数,问(1) 是否存在无穷多形如21n +的素数?(2) 是否存在无穷多形如22n +的素数?(3) 若1n >,在n 与2n 之间是否一定能找到一个素数?习题3 据说用欧拉给出的多项式241n n ++能够产生的素数是最多的,你是否能够找到类似的多项式,由它产生尽可能多的素数. 并对同一个n ,统计它们产生的素数的个数.习题4 从斐波那契数列中找出是素数的项,推测斐波那契数列中素数项是否有无穷多?习题5 证明欧几里得定理:若21n -是一个素数,则数12(21)n n --是完全数.习题 6 除了{3,5}这对孪生素数外,所有的孪生素数都是61n ±的形式,从该种形式的数对中选出孪生素数.提示:用Select[]函数.习题7 根据完全数的定义,编写一个搜索完全数的程序.参考程序:为了缩短搜索时间,仅在个位数为6和8的整数中寻找. 对于过大的n 用这个程序寻找完全数仍然需要较长的时间,例如取n 为10000,找到第四个完全数时大约需要2分多钟. PrefectNum[n_Integer]:=Module[{l ,s0,t ,s ={},S ={}},For[i =1,i <=n ,i ++,If[Last[IntegerDigits[i]]==6||Last[IntegerDigits[i]]==8,s =Append[s ,i ]]]; (*产生不超过n 的所有个位数为6和8的整数*)l =Length[s ];For[m =1,m <l ,m ++,s0=0;t ={};For[i =1,i <s[[m]],i ++,If[Mod[s[[m]],i ]==0,s0+=i ;t =Append[t ,i ]]];If[s0==s[[m ]],S =Append[S ,{s[[m]],t }]]];Return[S ]]习题8 根据完全数与梅森素数的关系,确定一个梅森素数p M ,验证12p p M -确实是一个偶完全数.。
什么是质数和合数
什么是质数和合数一.概念描述现代数学:一个大于1的整数,如果除1和它本身以外,没有其他的约数,这样的数就叫作质数,也叫素数。
一个大于1的整数,如果除了1和它本身以外,还有其他的约数,这样的数就叫作合数。
小学数学:2004年北京版教材第10册第56页提出:一个数除了1和它本身,不再有别的约数,这个数叫作质数(也叫作素数)。
—个数除了1和它本身,还有别的约数,这个数叫作合数。
2013年人教版教材五年级下册第23页提出:一个数,如果只有1和它本身两个因数,这样的数叫作质数(或素数)。
一个数,如果除了1和它本身还有别的因数,这样的数叫作合数。
二.概念解读①由质数和合数的概念可以知道,在非0的自然数中,1既不是质数也不是合数。
历史上曾将1也包含在质数之内,但后来为了算术基本定理,最终1被数学家排除在质数之外。
在小学阶段,学生学习质数和合数,是为后面学习求最大公因数、最小公倍数以及约分、通分打下基础。
②在数论中,质数有着重要的地位,一直吸引着许多数学家们不断去探索。
2500年前,古希腊数学家欧几里得证明了质数的个数是无限的,并提出少量质数可写成“2的n次方减1”的形式---这里n也是一个质数。
此后,许多数学家曾对这种质数进行研究。
17世纪的法国教士梅森是其中成果较为卓著的一位,因此后人将“2的n次方减1”形式的质数称为梅森质数。
由于梅森质数有许多独特的性质和无穷的魅力,千百年来一直吸引着众多的数学家,如欧几里得、费马、笛卡尔、莱布尼兹、哥德巴赫、欧拉、高斯、哈代、图灵等和无数的业余数学爱好者对它进行研究和探寻。
目前,人类仅发现47个梅森质数。
其中最大的质数是第46个梅森质数“2的43112609次方-1”,该质数有12978189位。
如果用常用的二号字将这个巨数连续写下来,其长度可超过50千米!是否有无穷多个梅森质数是数论中未解决的难题之一。
由于这种质数珍奇而迷人,因此被人们誉为“数海明珠”。
特别值得一提的是,我国数学家和语言学家周海中于1992年首先给出了梅森质数分布的准确表达式,从而揭示了梅森质数的重要规律,为人们探寻梅森质数提供了方便。
n与2n之间必有素数的最简证明
n与2n之间必有素数的最简证明【题目】n与2n之间必有素数的最简证明【导言】素数是数论中一个极为重要的概念。
它指的是大于1且只能被1和自身整除的正整数。
素数的性质一直以来都备受数学家的关注和研究。
其中,一个有趣且重要的结论是:对于任意给定的正整数n,n与2n 之间必定存在至少一个素数。
本文将以从简到繁的方式,给出这一结论的最简证明。
【正文】1. 我们首先从基本概念开始,回顾一下素数的定义。
根据定义,素数大于1且只能被1和自身整除。
要证明n与2n之间必有素数,我们需要说明这个区间中不存在任何被除了1和自身以外的数整除的数。
2. 考虑区间[n, 2n]中的所有自然数。
我们可以通过反证法来证明这个区间内至少存在一个素数。
假设区间中不存在素数,即区间中的所有数都可以被除了1和自身以外的数整除。
这意味着,对于区间中的任意一个数x,存在另一个数y(y不等于1和自身),使得x能被y整除。
3. 现在我们观察一下这个数y。
根据前面的假设,y不是素数,因此它可以被除了1和自身以外的数整除。
我们将y表示为y = p * q,其中p和q均为大于1的整数。
4. 根据上一步骤的观察,我们可以得到下列等式:n ≤ x = p * q ≤ 2n。
我们将这个等式进行简化,得到n / q ≤ p ≤ 2n / q。
5. 注意到n和q是已知的正整数,而p是一个大于1的整数。
我们可以看到,当q的取值范围在(1, n)之间时,p的取值范围在(n/q, 2n/q)之间。
6. 我们现在来观察一下p的范围。
根据上述推导,当q在(1, n)之间取值时,p的取值范围在(n/q, 2n/q)之间。
我们可以将p的范围继续简化为(1, 2)。
7. 如果p的取值范围在(1, 2)之间,那么p的取值只能是2。
我们可以得到一个结论:当q的取值在(1, n)之间时,p的取值只能是2。
也就是说,只有当q取值在(1, n)之间时,等式p * q = x才有可能成立。
梅森素数——精选推荐
梅森素数梅森素数素数也叫质数,是只能被自己和1整除的数,如2、3、5、7、11等。
2300年前,古希腊数学家欧几里得证明了素数有无穷多个,并提出少量素数可写成“2p-1”的形式,这里的指数p也是一个素数。
由于这种素数具有许多独特的性质和无穷的魅力,千百年来一直吸引着众多的数学家和无数的业余数学爱好者对它进行探究。
可能你还是不太了解,那就再详细点。
了解梅森素数还记得你小学时背诵的素数表吗?那时候它还叫做质数表“2、3、5、7……”如今你是否已经真正理解了老师说过的话:这些只能被1和本身整除的数,具有着无穷的魅力。
还记得你中学时计算的2的整数幂吗?计算机时代,作为二进制的体现,它们正大行其道。
“2、4、8、16、32、64、128、256……”十多年来,电脑内存的容量正是经历了这些熟悉的数字,直到现在的2048M(2G)以及更多。
现在,让我们从这些2的整数幂中挑出以素数为指数的,再把它减1,试试看会发现什么?22-1=3、23-1=7、25-1=31、27-1=127……嗯,你的心是不是激动起来了?一个伟大的发现似乎就在眼前……别急别急,你的发现很妙,只是有些儿惋惜……你已经迟到了二千年。
在2300多年前,古希腊的数学家,那位写出不朽的《几何原本》的欧几里得在证明了素数有无穷多个之后,就顺便指出:有许多素数可以写成2P-1的形式,其中指数P也是素数。
很容易想到,刚才你所发现的22-1、23-1、25-1、27-1正是其中排列最前的4个!当P=11、13、17、19、23……的时候,2P-1还是素数吗?到底有多少这种2P-1型的素数呢?在计算能力低下的公元前,这个关于素数的探寻之旅就已经吸引了无数的人。
人们唯独对素数如此着迷不是没有理由的,它有着许多简单而又美丽的猜想,有的已经成为定理,而有的则至今还没有答案。
例如著名的哥德巴赫猜想,让人们苦苦追索:是否任何一个大于或等于6的素数,都可以表示为两个奇素数的和?再比如孪生素数问题所提出的:像5和7、41和43这样相差2的素数,到底有多少对呢?在数学史上起个大早的古希腊人还有许多关于素数的发现,完美数就是其中之一。
素数通项公式
素数通项公式素数通项公式是数学中的一个重要公式,它可以用来表示素数的通项。
素数是大于1且只能被1和自身整除的正整数。
素数通项公式的发现对于数论的研究具有重要意义,也为解决一些实际问题提供了便利。
素数通项公式的具体形式是:P(n) = n^2 + n + 41,其中P(n)表示第n个素数。
这个公式由欧拉在18世纪中叶提出,并被证明在n取遍自然数时,P(n)都能够得到素数。
这个公式的发现引起了当时数学界的广泛关注,并被认为是一个重要的突破。
素数通项公式的证明过程较为复杂,需要运用到数论中的一些高级知识和技巧。
在这里,我们将不涉及具体的证明过程,而是通过一些例子来展示素数通项公式的应用和意义。
我们可以通过计算来验证素数通项公式的正确性。
例如,当n取1时,P(1) = 1^2 + 1 + 41 = 43,是一个素数。
当n取2时,P(2) = 2^2 + 2 + 41 = 47,也是一个素数。
以此类推,通过计算可以发现,当n取任意自然数时,P(n)都能够得到素数。
这正是素数通项公式的重要性所在。
素数通项公式的应用不仅限于数论领域,还涉及到其他一些实际问题的解决。
例如,在密码学中,素数通项公式可以用来生成一类特殊的素数,被称为欧拉素数。
这些素数具有一些特殊的性质,可以用来构造安全性更高的加密算法。
在计算机科学中,素数通项公式也被广泛应用于生成随机数。
由于素数具有较好的随机性和不可预测性,因此可以用来生成高质量的随机数序列,用于密码学、模拟实验等领域。
总的来说,素数通项公式是数学中的一个重要公式,它不仅具有理论意义,还有许多实际应用。
通过素数通项公式,我们可以方便地计算出任意位置的素数,为数论研究和实际问题的解决提供了便利。
同时,素数通项公式的应用也拓展了数学在密码学、计算机科学等领域的应用范围,为相关领域的发展做出了贡献。
虽然素数通项公式在数学和应用领域具有重要地位,但它并不是万能的,也存在一些限制和局限性。
数学实验教学大纲(李尚志)
《数学实验》教学大纲课程名称:数学实验英文名称:Experiments in Mathematics 总学时: 60 学分: 3开课学期:大一(下)或大二《数学实验》是在我国高等学校中新开设的一门课程。
现在还处于试点和摸索阶段,有许多不同的想法和作法. 现阶段应当鼓励各种不同的想法和作法, 各自进行探索和试点. 可以而且应当相互交流, 但不必统一, 也不必争论哪种做法更好. 现在首先是要先干起来, 经过若干年实践去积累和总结经验, 根据实践的效果来逐渐完善和成熟. 本教学大纲反映的是我们在中国科技大学试点创建数学实验课程的指导思想和具体做法,只能算是一家之言,供兄弟学校参考。
一.教学目的数学实验课程的教学对象, 是全国所有高校, 不分理工农医等科类的本科生。
课程目的, 是使学生掌握数学实验的基本思想和方法,即不把数学看成先验的逻辑体系, 而是把它视为一门“实验科学”, 从问题出发,借助计算机, 通过学生亲自设计和动手, 体验解决问题的过程, 从实验中去学习、探索和发现数学规律。
既然是实验课而不是理论课, 最重要的就是要让学生自己动手, 自己借助于计算机去“折腾”数学, 在“折腾”的过程中去学习, 去观察, 去探索, 去发现,而不是由老师教他们多少内容。
既不是由老师教理论, 主要的也不是由老师去教计算机技术或教算法。
不着意追求内容的系统性、完整性。
而着眼于激发学生自己动手和探索的兴趣。
二.教学内容的确定从问题出发组织教学内容。
虽然有意识让学生通过实验学会一些基本的方法, 但是并不以这些方法为线索组织课程内容。
而是设计了一些能够引起学生兴趣的问题, 这些问题的引入不需很深的数学知识,便于入门,但这些问题具有深刻的内涵,包括科学发展历史上经典的数学问题,以及具有应用价值的问题。
每个实验围绕解决一个或几个问题来展开, 教学生使用若干种方法来解决所给的问题, 在解决问题中学习和熟悉这些方法, 自己观察结果, 得出结论。
mathematica实验五 素数
数学实验报告实验五素数实验目的:本次实验将探讨素数的规律及其相关有趣的问题,具体,我们研究以下问题:素数的判别、构造生成素数的公式等。
通过本次实验激发对数论的好奇心,使我们对自然数的神奇规律而折服,同时使我们认识到探索自然数规律的艰难性。
实验步骤:1、利用Eratosthenes筛法,通过计算机编程求1000以内的所有的素数。
2、利用试除方法,通过计算机编程求1000以内的所有的素数。
3、计算所有小于等于n的素数的个数。
(n=1000,10000)n=1000时,程序如右:]Pr imePi[1000运行结果:168n=10000时,程序如右:][Pr imePi10000运行结果:12294、计算b a被n整除所得的余数。
(a=2,b=7,n=6)和(a=3,b=5,n=48)n=6时,程序如右:]6,7,2[PowerMod运行结果: 2n=48时,程序如右:]48,5,3[PowerMod运行结果: 35、判断Mersenne数的素性。
程序如下:False]]] T rue, 0, If[u M]];2, - Mod[u^2 u ,i 1,-n i 1, For[i 1; -n 2^ M False,PrimeQ[n], If[! 4},u i, {M, Module[: _Integer]Mersenne[n ===++<==== 当n=127时,输出结果: True当n=48时,输出结果: False6、 令dx x n Li n ⎰=2log 1)(,!)(log )1(11)(1k n k k n R k k ∑∞=++=ζ,其中⋯+++=k k k 31211)(ζ。
试对一系列充分大的n,计算),(n π),log(/n n ),083660.1)/(log(-n n ).()(n R n Li 及其中哪一个公式最接近)(n π?程序如下:100000}] 900000, 100000, {i, [i],Do[Compare ]Print[t]R];,AppendT o[t Li];,AppendT o[t ;1.08366)]] - 100000] Log[E,N[100000/( ,AppendT o[t 100000]]];og[E,N[100000/L ,AppendT o[t 0000]];PrimePi[10 ,AppendT o[t ;Infinity}] 2, {k, l[k],k/Factoria 100000]^ Log[E,*1] eta[k NSum[1/k/Z1 R 100000}];2, {x, x],[1/Log[E,NIntegrate Li {}},t k, Module[{x,100000: Integer]Compare[n_++====运行结果:9592, 8685.89, 9588.4, 9628.76, 9580.43观察得到最接近)(n π的是)083660.1)/(log(-n n 。
初等数论教案
初等数论教案一、引言初等数论是研究自然数的性质和关系的学科,属于数学的基础分支之一。
在教学中,我们需要引导学生了解数论的基本概念和方法,培养他们的数论思维和解题能力。
本教案将介绍如何系统地教授初等数论,以帮助学生建立坚实的数学基础。
二、教学目标1. 掌握数论的基本概念,包括质数、整除、最大公因数等。
2. 理解并运用数论的重要性质,如同余定理、欧拉定理等。
3. 培养学生的数论思维,能够独立解决数论问题。
4. 提高学生的数学证明能力,能够进行简单的数学推理和证明。
三、教学内容1. 质数与合数- 质数的定义与性质- 合数的定义与性质- 质因数分解的方法与应用2. 整除与倍数- 整除关系的定义与性质- 最大公因数与最小公倍数的计算方法- 用整除性质解决实际问题3. 同余- 同余关系的定义与性质- 同余定理的应用- 模运算的基本性质与运算规则4. 欧拉函数与欧拉定理- 欧拉函数的定义与性质- 欧拉定理的表述与证明- 欧拉定理在密码学中的应用5. 素数分布与素数定理- 素数的分布规律与猜想- 素数定理的表述与证明- 素数定理的应用与拓展四、教学方法1. 讲授与示范教师以简明的语言对数论的基本概念和性质进行讲解,辅以具体的例子进行示范。
2. 互动与讨论教师引导学生主动参与,提出问题并进行讨论,鼓励学生发表自己的观点和思考。
3. 实践与探究通过实际问题和实例的引导,鼓励学生灵活运用所学知识解决问题,并进行探究和发现。
4. 案例分析选取一些经典或有趣的数论问题进行案例分析,提高学生应用数论知识解决问题的能力。
五、教学评价1. 课堂表现评价考察学生对数论基本概念的理解、问题解决能力和参与互动的表现。
2. 作业评价布置适量的练习题和探究性的作业,评价学生对数论知识的掌握和应用能力。
3. 考试评价通过定期的小测验和期末考试评价学生的数论理论水平和解题能力。
六、教学资源1. 教材:根据教学内容选择合适的初等数论教材。
2. 多媒体:配备投影仪等多媒体设备,以便使用相关的课件和动态演示。
《数学实验》教学大纲
《数学实验》教学大纲课程编号:10107014学时:18学分:1课程类别:限制性选修课面向对象:数学与应用数学专业本科学生课程英文名称:Experiments in Mathematics一、课程的任务和目的任务:通过实验,使学生熟练掌握常用的数学实验方法,培养和提高应用计算机和相关软件进行科学与工程计算的能力,为以后的学习及应用打下良好的基础。
目的:使学生掌握数学实验的基本思想和方法,即不把数学看成先验的逻辑体系,而是把它视为一门“实验科学”,从问题出发,通过学习Matlab或Mathematica数学软件,借助计算机,学生亲自设计和动手,体验解决问题的过程,从实验中去学习、探索和发现数学的规律。
二、课程教学内容与要求(一)MATLAB桌面操作、矩阵与数组函数1.教学内容MATLAB桌面、矩阵与数组的建立及运算、Matlab常用数学函数、字符串、输入、输出。
2.基本要求掌握Matlab语言概况及基本知识。
3.重点和难点重点是语言基本知识的掌握,难点是Matlab语言与其他语言的差异。
(二) MATLAB程序设计与绘图1.教学内容MATLAB表达式、选择结构、循环结构、M文件(函数文件的定义)、全局变量和局部变量、数据和函数的可视化。
2.基本要求掌握MATLAB语言程序的设计与编写,能编程解决一些数学问题及绘图。
3.重点和难点重点是程序的设计与编写、错误的诊断和修正,难点是程序的设计、错误的诊断和修正。
(三)插值与拟合1.教学内容拉格朗日插值、分段线性插值、三次样条插值、曲线拟合的线性最小二乘法。
2.基本要求掌握用MATLAB计算拉格朗日、分段线性、三次样条插值的方法,能编写用线性最小乘法来作曲线拟合的程序。
3.重点和难点重点是一维插值和用多项式来拟合函数,难点是插值与拟合的源程序编写。
(四)应用微积分1.教学内容数值微积分MATLAB命令、计算实验:数值微积分、建模实验:奶油蛋糕。
2.基本要求掌握用MATLAB进行数值计算的方法,能编程计算数值导数和数值积分。
高中数学关于素数的知识和算法
关于质数(素数)的知识和有关算法(资料来源:维基百科)素数定义:素数(Prime Number),亦称质数,指在一个大于1的自然数中,除了1和此整数自身外,无法被其它自然数整除的数。
换句话说,只有两个正因数(1和自己)的自然数即为素数。
比1大但不是素数的数称为合数。
1和0既非素数也非合数。
素数在数论中有着很重要的地位。
关于素数:最小的素数是2,也是素数中唯一的偶数(双数);其它素数都是奇数(单数)。
素数有无限多个,所以不存在最大的素数。
围绕着素数存在很多数学问题、数学猜想和数学定理。
著名的有孪生素数猜想和哥德巴赫猜想。
素数序列的开头是这样:2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113………………素数集合有时表示成粗体。
在抽象代数的一个分支-环论中,素元素有特殊的含义,在这个含义下,任何素数的加法的逆转也是素数。
换句话说,将整数Z的集合看成是一个环,-Z是一个素元素。
但是在数学领域内,提到素数时通常指正的素数。
算术基本定理证明每个大于1的正整数都可以写成素数的乘积,并且这种乘积的形式是唯一的。
因此素数也被称为自然数的“建筑的基石”。
例如:素数的数目素数有无穷多个。
现在已知最早的证明方法是欧几里得在他的《几何原本》中提出的。
该证明方法如下:假设素数有限。
把所有这些有限的素数相乘以后加1,可以得到一个数。
这个数无法被那些有限的素数里的任何一个整除:因为无论被哪一个素数除,总有余数1。
如果该数为素数,则根据假设,它不在那些假设的素数集合中。
如果该数为合数,因为任何一个合数都可以分解为几个素数的积;而一开始假设的那些素数都不能整除该合数,所以该合数分解得到的素因子肯定不在假设的素数集合中。
因此无论该数是素数还是合数,都意味着在假设的有限个素数之外还存在着其它素数。
对任何有限个素数的集合来说,用上述的方法永远可以得到有一个素数不在假设的素数集合中的结论。
PTA实验LB05-LB08
LAB057-6 统计素数并求和(20 分)本题要求统计给定整数M和N区间内素数的个数并对它们求和。
输入格式:输入在一行中给出两个正整数M和N(1≤M≤N≤500)。
输出格式:在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。
输入样例:输出样例:return sign;}int main(){int sum=0,M,N,i,count=0;scanf("%d%d",&M,&N);for(i=M;i<=N;i++){if(isPrime(i)){sum=sum+i;count++;}}printf("%d %d",count,sum);return 0;}7-7 特殊a串数列求和(20 分)给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n 个a)之和。
输入格式:输入在一行中给出不超过9的正整数a和n。
输出格式:在一行中按照“s = 对应的和”的格式输出。
输出样例:s = 246#include<stdio.h>int main() {int a,t,n,i,sum;scanf("%d%d",&a,&n);sum=0,t=0;for(i=1;i<=n;i++){t=t*10+a;sum=sum+t;}printf("s = %d",sum);return 0;}7-8 猜数字游戏(15 分)猜数字游戏是令游戏机随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要你编写程序自动对其与随机产生的被猜数进行比较,并提示大了(“Too big”),还是小了(“Too small”),相等表示猜到了。
如果猜到,则结束程序。
程序还要求统计猜的次数,如果1次猜出该数,提示“Bingo!”;如果3次以内猜到该数,则提示“Lucky You!”;如果超过3次但是在N(>3)次以内(包括第N次)猜到该数,则提示“Good Guess!”;如果超过N次都没有猜到,则提示“Game Over”,并结束程序。
数学实验报告 素数
数学实验报告关于素数的探讨一、实验目的如果一个大于1的自然数只能被1及它本身整除,则该数称为素数。
我们可以很快判断一个很小的自然数是否为素数,但如果判断一个大的自然数就有些困难,本实验就是通过数学工具及数学方法来解决一些有关素数的问题,让我们更加了解素数及其分布规律。
需要解决的实验如下:1,如何判断1234567是否为素数2,生成素数表(500以内)3,探讨素数的分布规律二、问题求解方法由素数的定义可知如果一个数不能被大于1小于它本身的所有数整除,则可判断该数为素数,根据这种思想可以用C语言编程来判断1234567是否为素数;每一个合数都可以分解为若干个素数的乘积,如果想生成500以内的素数表,可以将2到500的数列中依次划去所有2的倍数,接着划去3的倍数,再划去5的倍数······这样一直进行下去就可以得到500以内的素数。
也可以用不超过√N考虑到500不是很大,可以先手工编写500以内的素数表,然后分别用c 语言和Mathematic程序生成素数表,并总结素数的分布规律。
三、程序设计流程1,判断1234567是否为素数的c语言程序:#include<stdio.h>void main(){int a=1234567,b=2;while(a%b!=0)b++;if(b<a)printf("no\n");else printf("yes\n");}2,用试除法生成500以内素数表的Mathematic程序DivPrime[n_Integer]:=500Module[{t={},i,j,temp,divided},For[i=2,i≤500,i++,j=1;divided=False;While[Prime[j]≤Sqrt[i]&&(!divided),temp=Prime[j];divided=(Mod[i,temp] 0);j=j+1];If[!divided,AppendTo[t,i]]];t]3,生成500以内素数表的c语言程序#include<stdio.h>void main(){int a=3,b=2,c;for(a=3;a<500;a++){for(b=2;b<=a;b++)if(a%b==0) break;if(b==a)printf("%d\n",a);}}四、上机实验结果的分析与结论通过上机运行上述程序可以判断1234567不为素数,并且将用程序生成的素数表与手工编写的素数表对比后得知一致,500以内素数表如下:{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83 ,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,17 3,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263 ,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359, 367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,4 61,463,467,479,487,491,499}这样就解决问题1和2,接下来观察并总结素数的规律.我们先利用以下程序计算出π(10), π(100), π(500), π(1000), π(2000), π(3000), π(5000)的值。
数学实验之五---素数
6、素数的分布
• 素数沿数轴的分布 • (1)随着整数范围的扩大,素数是不是 越来越稀疏?稀疏的程度是否单调地增 加? • (2)相邻素数之间的间隔值有哪些? 它 们各重复多少次? 哪些间隔值的重复次 数多? 最大间隔值是多少? 随整数范围 扩大, 最大间隔值是否也随之增大?
• (3)间隔差为2的素数对是否有无穷多 个? 更一般地, 间隔差为某一个固定偶 数的素数对是否有无穷多个? 是否存在 相邻的素数, 其间隔值可以任意大?
• 素性判别的多项式算法 给定一个n位的整数,假设某一算法能在 f(n)步内判断出该整数是否素数。如果f(n) 是一个多项式的话,则称该算法具有多 项式复杂性,称该问题是“多项式可解 的”。如果不存在一个算法其具有多项 式的计算复杂性,则称该问题属于NP问 题。
• 2002年8月,印度理工大学计算机系的三 位学者提出了整数素性判别的多项式算 法!即素性判别问题是P类问题。他们指 出算法复杂性一般为O(n^12)。如果提供 某些启发线索的话,算法的复杂性可以 降到O(n^6)甚至O(n^3). • 一个令人关注的问题是,该算法是否会 威胁现有的RSA公钥密码体系的安全?
• • • • •
关于Fermat数主要研究的问题是: (1)如何分解Fermat数? (2)Fermat素数是否只有有限个? (3)Fermat合数是否有无穷多个? (4)Fermat数有没有平方因子?
• Euler素数生成公式 Euler曾研究过公式:f(n)=n^2+n+41. 可以验证,当n=0,1,…,39时,f(n)都是 素数,但f(40)是合数。有趣的是,公式 能给出相当多的素数。
• 1980年数学家Adleman, Rumely, Cohen和Lenstra研究出一种非常复杂、具 有高度技巧的素数判别方法,检验一个 20位数的素性只需10秒,对一个5 0位数,只要15秒,而一个100位 数只用40秒。如果用试除法,判别一 个50位数的素性要一百亿年!
如何判断一个数是否是质数?
如何判断⼀个数是否是质数?⾸先,解释什么是质数:质数⼜称素数。
⼀个⼤于1的⾃然数,除了1和它⾃⾝外,不能被其他⾃然数整除的数叫做质数。
那么我们可以采⽤的⽅法是,将这个数除2到这个数本⾝减⼀,如果这其中除某个数,余数为零,那么这个数就可以判定为⾮质数(合数),否则就为质数。
⾄于为什么要从2开始除,这就是⼀个简单的数学问题了,因为能被1和本⾝其他⾃然数整除的数为质数,那么我们只需实验能否被1和此数本⾝之间的⾃然数整除。
⾃然数:即⾮负数的整数。
那么我们可以采⽤python编写⼀个⼩⽰例来检验⼀个数是否为质数:def isPrime(number):for i in range(2, number):if number % i == 0:return Falsereturn True 调⽤函数实验⼀下,分别⽤合数10和质数107调⽤函数: 然⽽,这种⽅式是将i遍历了2到数本⾝-1,实际不需要如此。
当⼀个数除以⽐这个数的⼀半还要⼤的数时,得到的值就已经是⼩于2了的⾮⾃然数,所以让这个数去除以⼤于本⾝⼀半的数来验证是否有⾃然数的值是不合理的。
所以我们只需要让这个数除以2到本⾝⼀半的数来验证是否是质数。
于是,代码可以改进提⾼运⾏性能:def isPrime(number):for i in range(2, number//2):if number % i == 0:return Falsereturn True 结果如上。
需注意的是,在第⼆⾏range()函数中,只让i遍历2到number//2-1,是因为,不需要让i等于这个数的⼀半,因为让这个数除以⾃⾝⼀半的数等于2,那么在i=2时就已经可以判定是否为质数了。
判断素数 逻辑
判断素数逻辑
判断一个数是否为素数是一个常见的数学问题,可以使用逻辑来进行判断。
素数是指大于1且只能被1和它自身整除的正整数。
下面是一个逻辑流程,用于判断一个自然数n是否为素数:
1.如果n小于等于1,则不是素数。
o因为素数定义是大于1的正整数。
2.如果n等于2或3,则是素数。
o因为2和3都是素数。
3.如果n能够被2整除,则不是素数。
o因为除了2本身,其他偶数都不是素数。
4.对于每个大于等于3且不被2整除的奇数i,如果n能够
被i整除,则不是素数。
o因为除了2以外的素数都是奇数,所以只需要检查奇数是否能整除n。
5.如果在步骤4中没有找到能够整除n的奇数,则n是素数。
o因为如果n不是素数,那么在步骤4中必然会找到一个能够整除n的奇数。
通过按照上述逻辑判断,可以确定一个数是否为素数。
如果满足步骤5的条件,则该数是素数;否则,该数不是素数。
需要指出的是,对于非常大的数,这种逻辑判断可能变得相对缓慢。
在实践中,更高效的素数判断方法通常会采用其他算法
和数学原理,如素数筛法、费马素性测试、米勒-拉宾素性测试等。
这些方法可以更快速地判断大数是否为素数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
18 19 26 27 20 28 21 29
6 14 22 30
7 15
8 16
9 17 25
23 24 31
32 33
经过众多学者的艰辛努力, D.N.Lehmer 于 1914年编织出了10000000以内的素数表。
• 试除法 假设我们已经找到了前n个素数p_1=2, p_2=3, ...,p_n, 为了寻找下一个素数我 们从p_n+2开始依次检验每一个整数N, 看 N是否能被某个p_i, i=1,2,...,n整除. 如果N能被前面的某个素数整除, 则N为合 数. 否则N即为下 一个素数p_{n+1}. 为提高算法的效率,只需用不超过 N 的素数去除N。
答案是无穷多个。实际上,数学家迈 罗在1903年证明,如果n为伪素数, 那么2^n-1也是伪素数。 不过,同素数个数相比,伪素数的个 数非常少。例如,在2x10^10之内, 伪素数不到素数的百万分之三。因此, 可以认为 Fermat定理的逆定理几乎成 立。
• 利用伪素数表,可以给出判别素数的新方 法:如果p不整除2^n-1, 则p为合数;如果 p整除2^n-1, 且在伪素数表中,则p为合数, 否则,p是素数。 • 伪素数可以推广到a-伪素数。令人惊奇的 是,存在这样的数p, 它对任何a都是伪素 数。例如,561=3x11x17就是这样一个伪 素数,即 a 560 1 (mod 561 )
• 将素数从小到大顺序排列p_1=2, p_2=3, ..., 用d_n=p_{n+1}-p_n表示相邻 素数间的间隔. 计算d_1,d_2,..., d_N(如 N=1000, 10000), 然后将点(p_n,d_n)标在 平面坐标系中.
25 20 15 10 5
500
1000
1500
2000
• • • • •
关于Fermat数主要研究的问题是: (1)如何分解Fermat数? (2)Fermat素数是否只有有限个? (3)Fermat合数是否有无穷多个? (4)Fermat数有没有平方因子?
• Euler素数生成公式 Euler曾研究过公式:f(n)=n^2+n+41. 可以验证,当n=0,1,…,39时,f(n)都是 素数,但f(40)是合数。有趣的是,公式 能给出相当多的素数。
4、最大的素数
• Mersenne数 形如 M 2 1 的数称为Mersenne数。 利用Mersenne数可以构造出非常大的素 数。 很显然,如果n是合数,则M_n也为合数, 但n为素数时,M_n不一定为素数。例如, M_11=2047=23x89是合数。
n n
1644年Mersenne宣称,对n=2,3,5,13, 17,19,31,67,127,257, M_n都是素数, 而且对其它n<257, M_n都是合数。 然而,后人证明M_67, M_257不是素数, 而M_61, M_89, M_107都是素数。
25 20 15 10 5
500
1000
1500
2000
N 1000
250 200 150 100 50
5
10
15
20
25
30
35
N 10000
• 这样的数称为绝对伪素数,也称迈克尔 数。如果迈克尔数只有有限个,则对 n>M, 素数的判别变得比较容易。但迈克 尔可能有无限个,这使得直接用Fermat 定理判别素性变得困难。
• n-1检验法 假设n-1=FR, F>R, gcd(F,R)=1. 如果对F的 每一个素因子q都存在一个整数a>1满足
2
67
1 193707721
7618382572
87
• 截止2002年2月, 数学家仅发现了39个 Mersenne素数.
n 86143 110503 132049 216091 位数 25962 33265 39751 65050 时间 1982 1983 1983 1985
n 756839 859433 1257787 1398269 2976221 3021377 6972593 13466917
• 素性判别的多项式算法 给定一个n位的整数,假设某一算法能在 f(n)步内判断出该整数是否素数。如果f(n) 是一个多项式的话,则称该算法具有多 项式复杂性,称该问题是“多项式可解 的”。如果不存在一个算法其具有多项 式的计算复杂性,则称该问题属于NP问 题。
• 2002年8月,印度理工大学计算机系的三 位学者提出了整数素性判别的多项式算 法!即素性判别问题是P类问题。他们指 出算法复杂性一般为O(n^12)。如果提供 某些启发线索的话,算法的复杂性可以 降到O(n^6)甚至O(n^3). • 一个令人关注的问题是,该算法是否会 威胁现有的RSA公钥密码体系的安全?
关于Mersenne素数的进一步问题: (1)Mersenne素数是否有无穷多个? (2)对什么样的n,M_n是素数?是否存在 求n的公式?至少使M_n为素数的n应该具有 什么性质? (3)如果M_n是合数,如果分解M_n?
5、生成素数的公式
• 是否存在单变量整系数的多项式, 它只 生成素数并且生成所有的素数? • 更一般地,是否存在一个生成素数的多变 量函数公式? • 如果这样的公式不存在, 能否找到一个 虽不能给出全部但能给出无穷多个素数 (且只给出素数)的公式?
a
2
a n
(mod n )
• 维路于1978年指出,上述常数C=70. • 由此可以设计如下多项式算法: 对任意n, 依次对a=1,2,…,70(logn)^2检验 上式是否成立。若对每一个a都不成立, 则n为素数。否则,n 为合数。 上述算法的运算量为O(logn)^5.
a
n 1
1
(mod n ),
gcd( a
( n 1 ) / q
1, n ) 1
则76年,缪内发现了素性判别与黎曼猜 想之间的一个深刻联系。他的结论是: 在广义黎曼假设下,存在常数C, 对任何 整数n, 若n为合数,则存在a<C(logn)^2 使得 n 1
6、素数的分布
• 素数沿数轴的分布 • (1)随着整数范围的扩大,素数是不是 越来越稀疏?稀疏的程度是否单调地增 加? • (2)相邻素数之间的间隔值有哪些? 它 们各重复多少次? 哪些间隔值的重复次 数多? 最大间隔值是多少? 随整数范围 扩大, 最大间隔值是否也随之增大?
• (3)间隔差为2的素数对是否有无穷多 个? 更一般地, 间隔差为某一个固定偶 数的素数对是否有无穷多个? 是否存在 相邻的素数, 其间隔值可以任意大?
• Fermat数 形如F_n=2^{2^n}+1的数被称为 Fermat数。 Fermat宣称,对所有的整数n, F_n永远是 素数。 的确, F_0=3, F_1=5, F_2=17, F_3=257, F_4=65537都是素数。 但Euler指出 F_5=4294967297=6416700417 是合数。
• 公式n^2+n+41有一个非常奇特的性质. 为揭示这一特性, 我们考察它的二次求 根公式的判别式d=1^2-4141 =-163. 163有什么特别的地方?有! 请看
163
e
2625374126
40768744.0
0000000000
0
• 作为Hilbert第十问题的一个推论, 马蒂 雅舍维奇证明了: 存在一个多元多项式 P(x_1,x_2,...,x_n), 其正值构成的集 合恰好是素数的全体. 遗憾的是, 他并 没有给出怎样具体地构造这样的多项式. 后经众多数学家的努力, 终于在1977年 构造出了一个具有26个变量25次的素数 生成多项式!
• 用(n)表示不超过n的素数的个数, (m,n)表示区间[m,n]内素数的个数. 固定d,绘制点列(i, (3^i,3^i+d)), i=1,2,…,N.
d 100
25 20 15 10 5
10
20
30
40
50
d 1000
150 125 100 75 50 25 10 20 30 40 50
• 五年后他进一步证明了: 一个正n边行可 用直尺与园规作图的充要条件是, n=2^k 或者n=2^k p_1 p_2... p_r, 其中 p_1,p_2,...,p_r为不同的Fermat数. 特 别地, 正17边形可以用直尺与园规做出. • 此后,数学家梨西罗与盖尔美斯给出了 正257边形与正65537边形的做图法!
• 后人验证出F_n (n<=19)均为合数。因此 有人猜测F_n(n>4)都是合数。 • Fermat数F_n与正多边形做图有紧密的联 系. 古代数学家认为,当n为大于6的素 数时,正n边形不能用圆规与直尺做出。 但是,在1796年,19岁的德国数学家 Gauss找到了用直尺与圆规做正17边形的 方法。这一辉煌的成果轰动了整个数学 界。
如果N为合数,则N必以某些 p i 为因子。 这是不可能的! 虽然素数有无穷多个,但随着整数范围 越来越大,素数似乎越来越稀少。 [1,100]----25 [1000,1100]---16 [100000, 100100]---6 [10000000,10000100]---2
2、素数表的构造
• 1980年数学家Adleman, Rumely, Cohen和Lenstra研究出一种非常复杂、具 有高度技巧的素数判别方法,检验一个 20位数的素性只需10秒,对一个5 0位数,只要15秒,而一个100位 数只用40秒。如果用试除法,判别一 个50位数的素性要一百亿年!
• • • • • • •
数学实验之五 --- 素数
实验内容
素数的个数 素数表的构造 素数的判别 最大的素数 求解素数的公式 素数的分布