python循環素數
① python循環素數
#!/usr/bin/python
#encoding:utf-8
importtime
importpprint
defallPrime(maxNum):
aList=range(0,maxNum)
def_do(aPrime):
foriinxrange(aPrime,maxNum,aPrime):
aList[i]=0
returnaPrime
returnmap(_do,
(iforiinxrange(2,maxNum)ifaList[i])
)
t0=time.time()
LIMIT=1000000
primelist=allPrime(LIMIT)
primesets=set(primelist)
defloopshift(num):
numlst=list(str(num))
result=list()
foriinrange(len(numlst)):
x=int(''.join(numlst[i:]+numlst[:i]))
ifxnotinprimesets:
returnNone
result.append(x)
result=sorted(set(result))
forxinset(result):
primesets.remove(x)
returnresult
found=list()
fornuminprimelist:
xn=loopshift(num)
ifxnandxnnotinfound:
found.append(xn)
pprint.pprint(found)
print"Processusage",time.time()-t0
>python -u ".py"
[[2],
[3],
[5],
[7],
[11],
[13, 31],
[17, 71],
[37, 73],
[79, 97],
[113, 131, 311],
[197, 719, 971],
[199, 919, 991],
[337, 373, 733],
[1193, 1931, 3119, 9311],
[3779, 7793, 7937, 9377],
[11939, 19391, 39119, 91193, 93911],
[19937, 37199, 71993, 93719, 99371],
[193939, 391939, 393919, 919393, 939193, 939391],
[199933, 319993, 331999, 933199, 993319, 999331]]
Process usage 0.953225135803
>Exit code: 0 Time: 1.033
② python判斷素數是什麼
判斷是否為素數的方法:
1、利用for循環和break語句,代碼為【for i in range(2, k+2):if m % i == 0:break】。
2、利用while循環和bool變數。
python使用技巧
如果在異常處理程序或 finally 塊中引發異常,默認情況下,異常機制會隱式工作會將先前的異常附加為新異常的 __context__ 屬性。這就是 Python 默認開啟的自動關聯異常上下文。
如果你想自己控制這個上下文,可以加個 from 關鍵字( from 語法會有個限制,就是第二個表達式必須是另一個異常類或實例。),來表明你的新異常是直接由哪個異常引起的。
③ python中用while循環計算100到10000的素數
素數的計算方法有很多種。
最樸素的辦法是,用所有小於n但大於1的整數去除n,如果均不能除盡,那麼,n就是素數。這就是篩法的核心。
進一步,除了2之外,所有素數都是奇數,那麼,用於試商的可以只用小於n但大於1的奇素數,並且只對奇數進行試商。
再進一步,如果一個數n可以分解為兩個因數相乘,那麼,至少其中一個因數是不大於n的平方根的,所以,我們可以對奇數n用不小於n的平方根但大於1的奇素數去試商。
到這一步,已經可以用來對一個比較小的數進行進行「是否是素數」的檢查了。麻煩的只是需要建立一個素數表,記錄從小到大我們找到的每一個素數。
參考以下代碼:
素數計算
篩法還有更高的應用方式,比如while中對i不是每次加而是每次加素數表前若干個數的積,如6,30,210中的某一個。(2是第一個素數)這種需要更多的控制,實現復雜,對速度的提升遠沒有隻對奇數試商和只用平方根以下的素數試商的提升大。
除了篩法以外,還有其它的方式去判斷一個數是不是素數,這里就不羅列了。
對於這道練習題,會篩法就足夠了,想進一步提升,你可以在上圖給出的方法的基礎上嘗試用步長為6的循環來做,如果做到了,那麼步長為30或更大的就只是體力活了。
④ Python使用遍歷循環for輸出2~500之間的所有素數,每個素數之間用跳格鍵分開 急!
##python演算法題:輸出2~100之間的素數
i=2
j=2
##除了1和其本身,其他都不能整除
for j in range(2,101):
for i in range(2,j):
if j%i==0:
break;
elif (j-1)==i:
print ('{}是素數'.format(j))
例如:
k = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
for i in range(100, 998):
if (i % 10 + i % 100 // 10) % 10 == (i // 100):
for m in k:
if i % m == 0:
break
if m ==31:
print(i)
(4)python循環素數擴展閱讀:
Python在執行時,首先會將.py文件中的源代碼編譯成Python的byte code(位元組碼),然後再由Python Virtual Machine(Python虛擬機)來執行這些編譯好的byte code。這種機制的基本思想跟Java,NET是一致的。
Python Virtual Machine與Java或.NET的Virtual Machine不同的是,Python的Virtual Machine是一種更高級的Virtual Machine。這里的高級並不是通常意義上的高級,不是說Python的Virtual Machine比Java或.NET的功能更強大,而是說和Java 或.NET相比,Python的Virtual Machine距離真實機器的距離更遠。
⑤ 用for循環求100以內的素數python
按照你的要求編寫的Python程序如下(輸出每5個一行)
import math
count=1
for i in range(2,100):
for j in range(2,int(math.sqrt(i))+1):
if i%j==0:
break
else:
if count%5==0:
print(i)
else:
print(str(i)+" ",end='')
count+=1
源代碼(注意源代碼的縮進)
⑥ 如何用Python編寫一個素數環
代碼:
n = int(input("請輸入最大數n:"))
lists = [[1]]#多個素數環
surplusnum = list(range(1,n+1)) #剩餘的數
def sumisprime(x, y):
#x與y之和是否是素數
isprime=True#是否是素數
s = x + y#和
for i in range(2, int(s**0.5)+1):
#素數判定法:從2開始直到此數的開方內的整數都不能被該數整除,則此數為素數
if s%i == 0:#能被整除
isprime = False#不是素數
break#跳出循環
return isprime#返回後否是素數(是:True,否:False)
changelast=lambda listx,addvalue:listx[0:-1]+[addvalue]#改變列表末尾的函數
while len(lists[0] if len(lists) else [0]*n) < n:#當素數環長度小於最大數時
n2 = len(lists[0]) #n2為判定,理論當前列表長度最大值
for listn in lists:#遍歷各個可能的素數環
surplusnum=list(range(1,n+1))#默認值
for j in listn:#遍歷當前列表的數
surplusnum.remove(j)#剩餘的數中刪除此數
for i in surplusnum:#遍歷剩餘的數
if sumisprime(listn[n2-1], i):#最後一個數與它的和是素數
if len(listn) == n2:#如果現在這個列表是沒有被添加過的
listn.append(i)#增加在這個列表
else:#如果該列表已經被添加過
lista = changelast(listn, i)#要加入的列表
if lista not in lists:#如果不在這個列表裡
lists.append(lista)#添加到另一個列表
for listn in lists.():#防止lists被刪造成影響
if len(listn) != n2+1:#如果長度沒有達到預期(+1)
lists.remove(listn)#刪除該列表(取消此可能性)
if len(lists[0]) == n:#已經符合條件
for listn in lists:#遍歷列表,檢查首尾
if sumisprime(listn[-1], listn[0]):#如果首尾相加等於素數
print(listn)#環成立,列印出來
break#結束循環
說明:經試驗,都沒什麼問題,n=12也能很快運算完(但我勸你不要打出來),如果你只需要1個素數環,可以把break的縮進調到print(listn)並列。
⑦ Python 素數
i = 2
while i <= 100:
j = 2
while j <= i / j: #難點1
if i % j == 0:
break #如果提前提出,j的值<= i / j
j = j + 1
if j > i / j: #難點2
print(i, end=' ')
i = i + 1
其實代碼每一句都很簡單,就不一一注釋了,其實難的是思路。主要是兩個地方對J變數的判斷
A:while循環,一種常見的是j<=sqrt(i),用這個數的開方(根號)來指定搜索上限,這是因為:
一個數若可以進行因數分解,那麼分解時得到的兩個數一定是一個小於等於sqrt(n),一個大於等於sqrt(n)——所以只要搜索到根號的地方就可以了,提高了速度。
用i/j的方式是sqrt的一種變種,j<=sqrt(i),由於i>j>1,兩邊平方後不等式仍然成立
j^2<=i
兩邊除以j就變成了j
<=
i
/
j
B:第二處,根據j的數值來判斷i是否是素數。當在循環中找到i
%
j
==
0的情況,循環會提前退出,導致j
< i
/
j——說明不是素數;如果循環沒有提前退出,說明i是素數,這時j的值>
i
/
j
⑧ python使用while循環輸出2到100之間的素數
i=2
j=2
##除了1和其本身,其他都不能整除
for j in range(2,101):
for i in range(2,j):
if j%i==0:
break;
elif (j-1)==i:
print ('{}是素數'.format(j))
⑨ python用while輸出2到100的素數
這個問題我們這也有學生提過,其實挺簡單,看我寫代碼
##python演算法題:輸出2~100之間的素數
i=2
j=2
##除了1和其本身,其他都不能整除
for j in range(2,101):
for i in range(2,j):
if j%i==0:
break;elif (j-1)==i:
print ('{}是素數'.format(j))
⑩ python中如何編程求1到100之間的素數
1、新建python文件,testprimenum.py;