快速素数列表生成器

描述:
这是使用Sieve算法的快速质数列表生成器。此功能返回质数列表

选择 | 换行 | 行号
  1. def primes(n): 
  2.     if n==2: return [2]
  3.     elif n<2: return []
  4.     s=range(3,n+1,2)
  5.     mroot = n ** 0.5
  6.     half=(n+1)/2-1
  7.     i=0
  8.     m=3
  9.     while m <= mroot:
  10.         if s[i]:
  11.             j=(m*m-3)/2
  12.             s[j]=0
  13.             while j<half:
  14.                 s[j]=0
  15.                 j+=m
  16.         i=i+1
  17.         m=2*i+3
  18.     return [2]+[x for x in s if x]
  19.  
  20. print primes(13)
  21. print primes(3000)
  22.  

来自Activestate的Python食谱区(
这里
)。
---------------------------------------------
[2,3,5,7,11,13]
[2、3、5、7、11、13、17、19、23、29、37、37、41、43、47、53、59、61、67、67、71、73,73,
79、83、89、97、101、103、107、109、113、127、131、137、139、139、149、151、157、163
,167、173、179、181、191、193、197、199、211、223、227、229、229、233、239、241、251
,257、263、269、271、277、281、283、293、307、311、313、317、331、337、347、349
,353、359、367、373、379、383、389、397、401、409、419、421、431、431、433、439、443
,449、457、461、463、467、479、487、491、499、503、509、521、523、541、547、547、557
,563,569,571,577,587,593,599,601,607,613,617,619,619,631,641,641,643,647
,653、659、661、673、677、683、691、701、709、719、727、733、739、743、743、751、757
,761、769、773、787、797、809、811、821、823、827、829、839、853、857、857、859、863
,877、881、883、887、907、911、919、929、937、941、947、947、953、967、971、977、977、983
,991、997、1009、1013、1019、1021、1031、1033、1039、1049、1051、1061、1063、10
69、1087、1091、1093、1097、1103、1109、1117、1123、1129、1151、1153、1163、1171
,1181、1187、1193、1201、1213、1217、1223、1229、1231、1237、1249、1259、1277,1277,
1279、1283、1289、1291、1297、1301、1303、1307、1319、1321、1327、1361、1367、13
73、1381、1399、1409、1423、1427、1429、1433、1439、1447、1451、1453、1459、1471
,1481、1483、1487、1489、1493、1499、1511、1523、1531、1543、1549、1549、1553、1559,
1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1619,1621,1627,1637,1637,16
57、1663、1667、1669、1693、1697、1699、1709、1721、1723、1733、1741、1747、1753
,1759、1777、1783、1787、1789、1801、1811、1823、1831、1847、1861、1867、1871,1871年,1871年,
1873,1877,1879,1889,1901,1907,1913,1931,1933,1933,1949,1951,1951,1973,1979,19,19,19
87、1993、1997、1999、2003、2011、2017、2027、2029、2039、2053、2063、2069、2081
,2083、2087、2089、2099、2111、2113、2129、2131、2137、2141、2143、2143、2153、2161,
2179、2203、2207、2213、2221、2237、2239、2243、2251、2267、2269、2269、2273、2281、22
87、2293、2297、2309、2311、2333、2339、2341、2347、2351、2357、2371、2377、2381
,2383、2389、2393、2399、2411、2417、2423、2437、2441、2447、2447、2459、2467、2473,
2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2591,2593,2609,26
17、2621、2633、2647、2657、2659、2663、2671、2677、2683、2687、2689、2689、2693、2699
,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2777,2789,2791,
2797,2801,2803,2819,2833,2837,2843,2843,2851,2857,2861,2879,2879,2887,2897,29
03,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999]

# 回答1


凉爽的!但是你为什么要这样做呢?

选择 | 换行 | 行号
  1. half=(n+1)/2-1

因为它等于

选择 | 换行 | 行号
  1. half=n+1

啊..真的没关系,我只是想发布一些东西:)
-Kudos

# 回答2


我会以为

选择 | 换行 | 行号
  1. half=(n+1)/2-1

会评估

选择 | 换行 | 行号
  1. half=((n+1)/2)-1

根据操作员优先规则
http://www.ibiblio.org/g2swap/byteof...Rec Edence.html

# 回答3

就是那种精神! 我想念这些天在帖子上见到你的头像。
# 回答4

啊....我完全忘记了...我应该在发布之前自己测试代码... :-) -Kudos

标签: python

添加新评论