Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python计算素数_Python - Fatal编程技术网

用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