質數又稱素數。指在一個大于1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。素數在數論中有著很重要的地位。比1大但不是素數的數稱為合數。1和0既非素數也非合數。質數是與合數相對立的兩個概念,二者構成了數論當中最基礎的定義之一。基于質數定義的基礎之上而建立的問題有很多世界級的難題,如哥德巴赫猜想等。算術基本定理證明每個大于1的正整數都可以寫成素數的乘積,并且這種乘積的形式是唯一的。這個定理的重要一點是,將1排斥在素數集合以外。如果1被認為是素數,那么這些嚴格的闡述就不得不加上一些限制條件。 前幾天偶爾的有朋友問python怎么判斷素數的方法,走網上查了查,總結了python腳本判斷一個數是否為素數的幾種方法:
1.運用python的數學函數?文章源自四五設計網-http://m.wasochina.com/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.單行程序掃描素數?文章源自四五設計網-http://m.wasochina.com/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)] ] |
運用python的itertools模塊文章源自四五設計網-http://m.wasochina.com/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:文章源自四五設計網-http://m.wasochina.com/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:文章源自四五設計網-http://m.wasochina.com/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之間的質數(素數)
既然只能被1或者自己整出,那說明只有2次余數為0的時候,代碼如下:文章源自四五設計網-http://m.wasochina.com/42854.html
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 |
結果如下:文章源自四五設計網-http://m.wasochina.com/42854.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 2001120021200232002920047200512006320071200892010120107201132011720123201292014320147201492016120173…. |
繼續閱讀
我的微信
微信掃一掃

我的微信
惠生活福利社
微信掃一掃

我的公眾號

評論