- A+
質(zhì)數(shù)又稱(chēng)素?cái)?shù)。指在一個(gè)大于1的自然數(shù)中,除了1和此整數(shù)自身外,不能被其他自然數(shù)整除的數(shù)。素?cái)?shù)在數(shù)論中有著很重要的地位。比1大但不是素?cái)?shù)的數(shù)稱(chēng)為合數(shù)。1和0既非素?cái)?shù)也非合數(shù)。質(zhì)數(shù)是與合數(shù)相對(duì)立的兩個(gè)概念,二者構(gòu)成了數(shù)論當(dāng)中最基礎(chǔ)的定義之一?;谫|(zhì)數(shù)定義的基礎(chǔ)之上而建立的問(wèn)題有很多世界級(jí)的難題,如哥德巴赫猜想等。算術(shù)基本定理證明每個(gè)大于1的正整數(shù)都可以寫(xiě)成素?cái)?shù)的乘積,并且這種乘積的形式是唯一的。這個(gè)定理的重要一點(diǎn)是,將1排斥在素?cái)?shù)集合以外。如果1被認(rèn)為是素?cái)?shù),那么這些嚴(yán)格的闡述就不得不加上一些限制條件。 前幾天偶爾的有朋友問(wèn)python怎么判斷素?cái)?shù)的方法,走網(wǎng)上查了查,總結(jié)了python腳本判斷一個(gè)數(shù)是否為素?cái)?shù)的幾種方法:
1.運(yùn)用python的數(shù)學(xué)函數(shù)?
|
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ù)?
|
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模塊
|
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:
|
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:
|
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或者自己整出,那說(shuō)明只有2次余數(shù)為0的時(shí)候,代碼如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#!/usr/bin/pythonL1=[]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é)果如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
2001120021200232002920047200512006320071200892010120107201132011720123201292014320147201492016120173…. |

