使用Python判斷質(zhì)數(shù)(素?cái)?shù))的簡單方法講解

質(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
….
文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html文章源自四五設(shè)計(jì)網(wǎng)-http://www.133122.cn/42854.html
繼續(xù)閱讀
我的微信
微信掃一掃
weinxin
我的微信
惠生活福利社
微信掃一掃
weinxin
我的公眾號
 

發(fā)表評論

匿名網(wǎng)友
:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

拖動滑塊以完成驗(yàn)證