此代碼有什麼問題?僅使用循環和if語句打印素數
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
for a in range (2,int(math.sqrt(z) + 1)):
if z%a != 0:
print(z)
else:
break
這裏有什麼問題?我不斷收到複合數字。
此代碼有什麼問題?僅使用循環和if語句打印素數
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
for a in range (2,int(math.sqrt(z) + 1)):
if z%a != 0:
print(z)
else:
break
這裏有什麼問題?我不斷收到複合數字。
對於ž是一個素數,它必須是不存在任何數量的情況下,這樣2 <= a <= sqrt(z)
和一個是ž的一個因素。我會將您的代碼更改爲:
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
if all(z%a != 0 for a in range (2,int(math.sqrt(z) + 1))):
print(z)
即使打印號碼不能被一個數字整除,但可被另一個數字整除。
打印應該在循環之外。
import math
y=1
z=y
while z>= 1 and z<1000 :
z= 2*y + 1
y=y+1
flag=0
for a in range (2,int(math.sqrt(z) + 1)):
if z%a == 0:
flag=1
break
if flag==0:
print z
,以提高你的算法將是6的倍數爲移動和檢查是multipleofsix-1
和multiple of six+1
這會給你一個更好的效率數的另一種方式。除2和3外,所有其他素數都可以在該範圍內找到。
進一步的改進將要求您維護一個數組並存儲所有先前的素數,並且只將其除以所檢查數字的平方根以下的所有素數。
還有更好的即興創作,如Eratosthenes和Atkins的篩選,但這些是您可以實現的最基本的。
我無法獲得您的國旗聲明...... ???我是一個初學者,我onli knw ..如果語句,while循環.. – sidchelseafan
國旗只是一個變量。它存儲0,如果該數字不可被從a到'range(2,int(math.sqrt(z)+1)'中的任何數字不可分割' '只要其中一個數字完全除以'如果z%a = = 0'該標誌變爲1. 只有當該標誌爲0時纔是打印的數字,否則它可以被其他數字整除,因此不是質數。 – Sohaib
不要忘記標記爲正確/ upvote,如果找到它有用的。這就是這個社區的功能 – Sohaib