Python语言系统学习9:质数的判断

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qingwufeiyang12346/article/details/102768310

从事嵌入式系统软硬件设计工作已有将尽20年的时间,在进行硬件目标板调试时,常需要上位机软件支持。在进行上位机软件程序的设计时,采用过VB、VB.net和C++等多种语言,偶然的机会发现Python,接触后,立刻感觉到它的强大,现在我的上位机软件编程只用Python。本系列教程将从基于硬件的上位机软件设计的角度着手,系统介绍Python语言,希望读者通过本系列教程的学习,能够对Python语言立刻学以致用,真正将所学知识应用到项目实践中。

开发环境:Visual Studio Code

操作系统:Microsoft Window 7

Python版本:3.7

参考教材:Python快速编程入门,黑马程序员,人民邮电出版社,2017年9月第1版

备注:教程仅适合初学者,高手请绕过


一、素数的定义

质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。

目前为止,人们未找到一个公式可求出所有质数。

2016年1月,发现世界上迄今为止最大的质数,长达2233万位,如果用普通字号将它打印出来长度将超过65公里。

二、著名猜想

1、哥德巴赫猜想

在1742年给欧拉的信中哥德巴赫提出了以下猜想:任一大于2的整数都可写成三个质数之和。因现今数学界已经不使用“1也是素数”这个约定,原初猜想的现代陈述为:任一大于5的整数都可写成三个质数之和。欧拉在回信中也提出另一等价版本,即任一大于2的偶数想陈述为欧拉的版本。把命题"任一充分大的偶数都可以表示成为一个素因子个数不超过a个的数与另一个素因子不超过b个的数之和"记作"a+b"。1966年陈景润证明了"1+2"成立,即"任一充分大的偶数都可以表示成二个素数的和,或是一个素数和一个半素数的和"。 今日常见的猜想陈述为欧拉的版本,即任一大于2的偶数都可写成两个素数之和,亦称为“强哥德巴赫猜想”或“关于偶数的哥德巴赫猜想”。

从关于偶数的哥德巴赫猜想,可推出任一大于7的奇数都可写成三个质数之和的猜想。后者称为“弱哥德巴赫猜想”或“关于奇数的哥德巴赫猜想”。

若关于偶数的哥德巴赫猜想是对的,则关于奇数的哥德巴赫猜想也会是对的。1937年时前苏联数学家维诺格拉多夫已经证明充分大的奇质数都能写成三个质数的和,也称为“哥德巴赫-维诺格拉朵夫定理”或“三素数定理”。

2、黎曼猜想

黎曼猜想是关于黎曼ζ函数ζ(s)的零点分布的猜想,由数学家波恩哈德·黎曼(1826~1866)于1859年提出。德国数学家希尔伯特列出23个数学问题。其中第8问题中便有黎曼假设。素数在自然数中的分布并没有简单的规律。黎曼发现素数出现的频率与黎曼ζ函数紧密相关。黎曼猜想提出:黎曼ζ函数ζ(s)非平凡零点(在此情况下是指s不为-2、-4、-6等点的值)的实数部份是1/2。即所有非平凡零点都应该位于直线1/2 + ti(“临界线”(critical line))上。t为一实数,而i为虚数的基本单位。至今尚无人给出一个令人信服的关于黎曼猜想的合理证明。

在黎曼猜想的研究中,数学家们把复平面上 Re(s)=1/2 的直线称为 critical line。 运用这一术语,黎曼猜想也可以表述为:黎曼ζ 函数的所有非平凡零点都位于 critical line 上。

黎曼猜想是黎曼在 1859 年提出的。在证明素数定理的过程中,黎曼提出了一个论断:Zeta函数的零点都在直线Res(s) = 1/2上。他在作了一番努力而未能证明后便放弃了,因为这对他证明素数定理影响不大。但这一问题至今仍然未能解决,甚至于比此假设简单的猜想也未能获证。而函数论解析数论中的很多问题都依赖于黎曼假设。在代数数论中的广义黎曼假设更是影响深远。若能证明黎曼假设,则可带动许多问题的解决。

3、孪生质数

1849年,波林那克提出孪生质数猜想(the conjecture of twin primes),即猜测存在无穷多对孪生质数。猜想中的“孪生”是指一对质数,它们之间相差2。例如3和5,5和7,11和13,10,016,957和10,016,959等等都是孪生质数

例如3和5 ,5和7,11和13,…,10016957和10016959等等都是孪生质数。孪生质数有一个十分精确的普遍公式,是根据一个定理:“若自然数Q与Q+2都不能被不大于根号Q+2的任何质数整除,则Q与Q+2是一对质数,称为相差2的孪生质数。这一句话可以用公式表达:Q=p1m1+a1=p2m2+a2=....=pkmk+ak其中p1,p2,...,pk表示顺序质数2,3,5,....。an≠0,an≠pn-2。若Q<P(k+1)的平方减2,则Q与Q+2是一对孪生质数。 所以,只要按着公式计算,理论上有无数个孪生质数。

英国数学家戈弗雷·哈代和约翰·李特尔伍德曾提出一个“强孪生素数猜想”。这一猜想不仅提出孪生素数有无穷多对,而且还给出其渐近分布形式。2013年5月,华人数学家张益唐在孪生素数研究方面所取得的突破性进展,他证明了孪生素数猜想的一个弱化形式。在最新研究中,张益唐在不依赖未经证明推论的前提下,发现存在无穷多个之差小于7000万的素数对,从而在孪生素数猜想这个重要问题的道路上前进了一大步。

三、判断1个数是否为质数

1、PyQt设计界面:

2、对象命名:

3、源程序:

def Judge(self):
        a = int(self.txtNumber.text())
        if a <= 1:
            self.labResult.setText("结果:不是质数")
        else:
            result = True
            for i in range(2, a):
                if a % i == 0:
                    result = False
                    break
            if result == True:
                self.labResult.setText("结果:是质数")
            else:
                self.labResult.setText("结果:不是质数")

三、列出2到指定数中所包含的所有质数

1、PyQt设计界面:

2、对象命名:

3、属性设置

4、只读设置

5、源程序:

def Output(self):
        a = int(self.txtNumber.text())
        self.txtResult.setText("")
        for i in range(2, a + 1):
            if self.IsPrime(i) == True:
                self.txtResult.insertPlainText(str(i) + "\r\n")

    def IsPrime(self, number):        
        if number <= 1:
            return False
        else:
            for i in range(2, number):
                if number % i == 0:
                    return False
            return True

 

任何问题,只需在此文章的评论处留言即可,我将尽力解答,不要试图采用其它的联系方式,我一概不理会。

原创性文章,转载请注明出处CSDN:http://blog.csdn.net/qingwufeiyang12346


 

猜你喜欢

转载自blog.csdn.net/qingwufeiyang12346/article/details/102768310