質(zhì)數(shù)又稱素?cái)?shù)。指在一個大于1的自然數(shù)中,除了1和此整數(shù)自身外,不能被其他自然數(shù)整除的數(shù)。素?cái)?shù)在數(shù)論中有著很重要的地位。比1大但不是素?cái)?shù)的數(shù)稱為合數(shù)。1和0既非素?cái)?shù)也非合數(shù)。質(zhì)數(shù)是與合數(shù)相對立的兩個概念,二者構(gòu)成了數(shù)論當(dāng)中最基礎(chǔ)的定義之一。基于質(zhì)數(shù)定義的基礎(chǔ)之上而建立的問題有很多世界級的難題,如哥德巴赫猜想等。算術(shù)基本定理證明每個大于1的正整數(shù)都可以寫成素?cái)?shù)的乘積,并且這種乘積的形式是唯一的。這個定理的重要一點(diǎn)是,將1排斥在素?cái)?shù)集合以外。如果1被認(rèn)為是素?cái)?shù),那么這些嚴(yán)格的闡述就不得不加上一些限制條件。 前幾天偶爾的有朋友問python怎么判斷素?cái)?shù)的方法,走網(wǎng)上查了查,總結(jié)了python腳本判斷一個數(shù)是否為素?cái)?shù)的幾種方法:
1.運(yùn)用python的數(shù)學(xué)函數(shù)?文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
1 2 3 4 5 6 7 8 9 | import math def isPrime(n): ?? if n < = 1 : ?? return False ?? for i in range ( 2 , int (math.sqrt(n)) + 1 ): ?? if n % i = = 0 : ???? return False ?? return True |
2.單行程序掃描素?cái)?shù)?文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
1 2 3 | from math import sqrt N = 100 [ p for p in ? range ( 2 , N) if 0 not in [ p % d for d in range ( 2 , int (sqrt(p)) + 1 )] ] |
運(yùn)用python的itertools模塊文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
1 2 3 4 5 6 7 8 9 | from itertools import count def isPrime(n): www.jb51.net ?? if n < = 1 : ???? return False ?? for i in count( 2 ): ???? if i * i > n: ?????? return True ???? if n % i = = 0 : ?????? return False |
3.不使用模塊的兩種方法
方法1:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
1 2 3 4 5 6 7 8 9 | def isPrime(n): ?? if n < = 1 : ???? return False ?? i = 2 ?? while i * i < = n: ???? if n % i = = 0 : ?????? return False ???? i + = 1 ?? return True |
方法2:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
1 2 3 4 5 6 7 8 9 10 11 12 13 | def isPrime(n): ?? if n < = 1 : ???? return False ?? if n = = 2 : ???? return True ?? if n % 2 = = 0 : ???? return False ?? i = 3 ?? while i * i < = n: ???? if n % i = = 0 : ?????? return False ???? i + = 2 ?? return True |
eg:求出20001到40001之間的質(zhì)數(shù)(素?cái)?shù))
既然只能被1或者自己整出,那說明只有2次余數(shù)為0的時候,代碼如下:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
1 2 3 4 5 6 7 8 9 10 11 12 | #!/usr/bin/python L1 = [] for x in xrange ( 20001 , 40001 ): ? n = 0 ? for y in xrange ( 1 ,x + 1 ): ? if x % y = = 0 : ?? n = n + 1 ? if n = = 2 : ? print x ? L1.append(x) print L1 |
結(jié)果如下:文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 20011 20021 20023 20029 20047 20051 20063 20071 20089 20101 20107 20113 20117 20123 20129 20143 20147 20149 20161 20173 …. |


評論