例1、判斷1-100之間的所有素數(素數又叫質數,只有1和它本身狂歌因數)
因為1既不是``素數又不是合數,所以從2開始判斷
list=
for i in range(2,101):
for j in range(2,i-1)
if i%j==0:
print('%d是素數'%(i))
#else 這裡不需要寫else,因為不滿足if條件後自動返回迴圈遍歷iprint(list)
檢查總結
上述**錯誤:
①執行結果錯誤-能被1和自身整除的數不是素數,所以if條件成立後新增至list錯誤;
②數字重複-每有乙個整除因數就新增一次,錯誤至重複;
③j遍歷範圍不對-找因數排出1和i自身即可,又range()包前不包後,所以i-1錯誤;
④2已知的素數,漏掉
改正**為:
list= #for i in range(2,101):
j=2 #因為range範圍原因,j=2遍歷不到,所以這裡直接賦值給出
for j in range(2,i):
if i%j==0:
print('%d不是素數'%(i))
break
else:
print('%d是素數'%(i))
print(list)
注意上述**還是錯誤的:
else與if 同等時,對於乙個i,取乙個因數判斷不符條件後,後續還會繼續遍歷j進行判斷,因此錯誤;
正確因該是:只要有乙個因數j使if條件成立,即可排出素數可能,跳出第二個if迴圈,但是若是遍歷完所有j都不能使if條件成立,則才能得出i是素數的結論,故else縮排與j的for迴圈同等;
最終版改寫**:
list=
for i in range(2,101):
j=2 #因為range範圍原因,j=2遍歷不到,所以這裡直接賦值給出
for j in range(2,i):
if i%j==0:
print('%d不是素數'%(i))
break
else:
print('%d是素數'%(i))
print(list)
方法二: 使用多執行緒實現
from threading import thread,lock
#import threading
lock=lock() #建立鎖
list1=
for i in range(2,101):
def prime_number():
global list1
while true: #這裡的主要目的是迴圈遍歷,可以改寫為 while list1!=0
#為防止資料錯誤,多執行緒時加鎖
lock.acquire()
num=list1[0]
lock.release()
flag=0
for j in range(2,num):
if num%j==0:
flag=1
break
#這裡不寫else,因為不需要不滿足的情況
if flag==0:
print(num,'是素數')
else:
print(num,'不是素數')
list_threading=
for i in range(5):
t=thread(target=prime_number)
for i in list_threading:
i.start()
for i in list_threading:
i.join()
print('我是主程序')
關於素數的研究
首先需要講的是這篇文章,太精闢了 1.最簡單的求素數 bool isprime int primes,int n 2.得到乙個素數表 構造素數序列primes void makeprimes int primes,int num if flag primes cnt i 如上是得到乙個純素數表,而使...
Jmesa 例項研究
新專案要用到這個元件,用了一天多的時間簡單學習了一下,感覺jmesa在處理設計 風格上還是很強大的,不足的是標籤不是很完善,貌似不能用標籤來設計匯出功能。jmesa官網 http code.google.com p jmesa 三.環境搭建 無論寫什麼程式,環境是很重要的。將jmesa 3.0 li...
素數定理相關的研究
a 小於等於n 當a等於0時,上式就是高斯提出的素數定理,當a等於n時上式顯然成立。a越大,上式求出的結果越精確,但是a越大 a到n素數個數約為 上式求解很複雜,黎曼素數計數公式推導過程有介紹上式的求解,太過專業,一般人看不懂吧。我們利用尤拉乘積公式處理,上式約等於 再利用積分處理,上式約等於 上式...