用python计算素数
我知道,关于素数已经有很多问题了,但我不需要密码。我只是想知道,我的错在哪里(我希望这些评论能帮助你们理解,我在做什么):用python计算素数,python,Python,我知道,关于素数已经有很多问题了,但我不需要密码。我只是想知道,我的错在哪里(我希望这些评论能帮助你们理解,我在做什么): 从数学导入单元 def isPrimeNumber(n,out='short'):#检查n是否为素数 答案=‘是’ 对于范围(2,int(ceil(n**0.5))+1中的p:#检查所有小于 #SQRT(n),如果它们是n的除数 如果n%p==0:#如果p是除数,n不是素数 答案=‘不’ 如果输出==“详细”: 打印“最小除数为”,p 返回错误 打破 如果答案==‘是’:#
从数学导入单元
def isPrimeNumber(n,out='short'):#检查n是否为素数
答案=‘是’
对于范围(2,int(ceil(n**0.5))+1中的p:#检查所有小于
#SQRT(n),如果它们是n的除数
如果n%p==0:#如果p是除数,n不是素数
答案=‘不’
如果输出==“详细”:
打印“最小除数为”,p
返回错误
打破
如果答案==‘是’:#如果没有p,那是一个除数,n是素数
如果输出==“详细”:
打印“除1和',str(n)+'外,无除数!”
返回真值
def素数(开始=1,停止=1000,数字=0):
N=停止
如果数字==0:#计算一行中N个数字中的所有素数
#(N=1000->计算1000个数字中的所有素数,
#默认情况下,从1到997)
素数=[]
对于范围内的i(开始,N+1):
如果isPrimeNumber(i)=真:
素数。附加(i)
elif numbers==1:#计算一行中的N个素数
#(N=1000->计算1000个素数)
素数=[开始]
i=len(素数)
j=1
而我这里有一个无限循环:
while i <= N:
n = max(primes) + 1 ### resetting `n'!
while j != 'stop':
if isPrimeNumber(n, out='short') == True:
...
j = 'stop'
else:
n = n + 1
while i问题在于,您的j变量最终被设置为“stop”,然后再也不会后退,因此while j!='停止“
仅在第一次工作时有效
# don't initialize j here
while i <= N: #Stops, when we get N prime numbers - doesn't work!
n = max(primes) + 1
j = 1 #initialize it here
while j != 'stop':
if isPrimeNumber(n, out='short') == True:
primes.append(n)
i = i + 1
j = 'stop' #Stops nested cycle, when reached
#the first prime number
else:
n = n + 1
#不要在这里初始化j
当我我只是想把它清理一下
from math import ceil
def isprime (n,out="short"):
answer = True
for p in range(2,int(ceil(n ** 0.5)) + 1):
if n % p == 0:
answer = False
if out == "verbose":
print "Least Divisor: " + str(p)
return False
if answer:
if out == "verbose":
print "No Divisors (Except For 1 & " + str(n) + "!"
return True
def primenumbers (start = 1,stop = 1000,numbers = False):
N = stop
if numbers:
primes = [start]
i = len(primes)
j = 1
while i <= N:
n = max(primes) + 1
j = true
while j:
if isPrimeNumber(n):
primes.append(n)
i = i + 1
j = false
else:
n = n + 1
else
primes = []
for i in range(start,N + 1):
if isPrimeNumber(i):
primes.append(i)
return primes
从数学导入单元
def isprime(n,out=“short”):
答案=正确
对于范围为(2,int(ceil(n**0.5))+1的p:
如果n%p==0:
答案=错误
如果输出==“详细”:
打印“最小除数:”+str(p)
返回错误
如果回答:
如果输出==“详细”:
打印“无除数(除1和“+str(n)+”!”
返回真值
def素数(开始=1,停止=1000,数字=False):
N=停止
如果是数字:
素数=[开始]
i=len(素数)
j=1
首先,您应该遵循PEP 8编写更可读的代码。此外,不要使用像'Yes'
或'No'
这样的字符串,而是更喜欢布尔值(True
和False
).我正试着遵循它,但我刚刚开始编程,首先我想学习编写工作代码。但是谢谢!嗯,我不知道,为什么我没有在那里使用布尔,因为我在同一个程序的不同位置使用它们…谢谢!嗯,所以外循环是无限的?但是,实际上,每次它工作时,n=max(primes)+1是不同的,因为素数应该有一个新的数字,不是吗?
from math import ceil
def isprime (n,out="short"):
answer = True
for p in range(2,int(ceil(n ** 0.5)) + 1):
if n % p == 0:
answer = False
if out == "verbose":
print "Least Divisor: " + str(p)
return False
if answer:
if out == "verbose":
print "No Divisors (Except For 1 & " + str(n) + "!"
return True
def primenumbers (start = 1,stop = 1000,numbers = False):
N = stop
if numbers:
primes = [start]
i = len(primes)
j = 1
while i <= N:
n = max(primes) + 1
j = true
while j:
if isPrimeNumber(n):
primes.append(n)
i = i + 1
j = false
else:
n = n + 1
else
primes = []
for i in range(start,N + 1):
if isPrimeNumber(i):
primes.append(i)
return primes