扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
你是要真的算,还是为了验证
成都创新互联公司专注于松北企业网站建设,响应式网站开发,成都商城网站开发。松北网站建设公司,为松北等地区提供建站服务。全流程按需制作,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
梅森素数,是二的p次方减一,其中p也是素数
那把你的程序就可以写一个生成素数的算法,代入公式里p,他在写一个检验素数的算法,然后逐个验证P,就知道有哪些梅森素数
PYTHON中的伪随机数发生器用的是梅森旋转算法。
梅森旋转算法(Mersenne twister)是一个伪随机数发生算法。由松本真和西村拓士在1997年开发,基于有限二进制字段上的矩阵线性递归。可以快速产生高质量的伪随机数,修正了古典随机数发生算法的很多缺陷。
梅森旋转算法是R、Python、Ruby、IDL、Free Pascal、PHP、Maple、Matlab、GNU多重精度运算库和GSL的默认伪随机数产生器。从C++11开始,C++也可以使用这种算法。
整个算法主要分为三个阶段:获得基础的梅森旋转链;对于旋转链进行旋转算法;对于旋转算法所得的结果进行处理。
算法实现的过程中,参数的选取取决于梅森素数,故此得名。
梅森素数由梅森数而来。所谓梅森数,是指形如2↑p-1的一类数,其中指数p是素数,常记为Mp 。如果梅森数是素数,就称为梅森素数。
例如4-1=3,8-1=7,16-1=15(不是素数),32-1=31,64-1=63(不是素数)等等。
import datetime
from math import sqrt
def prime_number(m):
L = [2, 3]
for n in range(2, m):
for i in range(2, int(sqrt(n))+1):
if n % i == 0:
break
if int(sqrt(n)) == i:
L.append(n)
return L
def perfect_number(x):
List = []
for n in prime_number(x):
if (pow(2, n)-1)*pow(2, n-1) x:
break
if pow(2, n)-1 in prime_number(x):
List.append((pow(2, n)-1)*pow(2, n-1))
return List
start = datetime.datetime.now()
print(perfect_number(10000))
end = datetime.datetime.now()
print(end - start)
[6, 28, 496, 8128]
获取10000以内的完全数用时0.194480秒
学电脑到~新华电脑学院
梅森素数是由梅森数而来。所谓梅森数,是指形如2ⁿ-1的一类数,其中指数n是素数,常记为Mn ,如果梅森数是素数,就称为梅森素数。用因式分解法可以证明,若2ⁿ-1是素数,则指数n也是素数。
“梅森素数”(Mersenne prime)是指形如2^P-1的素数,如2^2-1=3、2^3-1=7、2^5-1=31等。早在2300年前,古希腊数学家欧几里得用反证法证明素数有无穷多个;他认为,其中一些素数可写成2^P-1的形式。
由于2^P-1型素数具有独特的性质和无穷的魅力,千百年来一直吸引着众多的数学家和无数的业余数学爱好者对它进行探究。17 世纪法国数学家马林·梅森是他们中最杰出的探究者。
由于梅森学识渊博、才华横溢、为人热情以及最早系统而深入地研究2^P-1型素数,为了纪念他,数学界将这种特殊形式的素数命名为“梅森素数”。迄今为止,人类仅发现51个梅森素数。这种素数珍奇而迷人,因而被人们称为“数学宝山上的钻石”。梅森素数历来是数论研究的一项重要内容,也是当今科学探索的热点和难点之一。
2^P-1貌似简单,但探究难度却很大;当指数P值较大时,不仅需要高深的理论和纯熟的技巧,而且还需要进行艰巨的计算。1772年,有“数学英雄”美名的瑞士数学大师莱昂哈德·欧拉在双目失明的情况下,靠心算证明了2^31-1(即2147483647)是第8个梅森素数。这个具有10位的素数,堪称当时世界上已知的最大素数。
在“手算笔录”的年代,人们历尽艰辛,仅找到12个梅森素数。而计算机的产生加速了梅森素数探究进程。1952年,美国数学家拉斐尔·鲁滨逊等人使用SWAC型计算机在短短的几个月内,就找到了5个梅森素数:2^521-1、2^607-1、2^1279-1、2^2203-1和2^2281-1。
探索梅森素数的原因
它促进了分布式计算技术的发展。从最新的17个梅森素数是在因特网项目中发现这一事实,可以想象到网络的威力。分布式计算技术使得用大量个人计算机去做本来要用超级计算机才能完成的项目成为可能,这是一个前景非常广阔的领域,它的探究还推动了快速傅立叶变换的应用。
梅森素数在实用领域也有用武之地,现在人们已将大素数用于现代密码设计领域。其原理是:将一个很大的数分解成若干素数的乘积非常困难,但将几个素数相乘却相对容易得多,在这种密码设计中,需要使用较大的素数,素数越大,密码被破译的可能性就越小。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流