繁体   English   中英

素数的python算法

[英]python algorithm for prime numbers

假设函数is_prime可用。 假设变量n已与正整数关联。 写出所需的语句,以找出在超过n之前可以添加多少个质数(以2开头,并以依次增加的质数[2,3,5,7,11,13,...]递增)。 将此数字与变量k关联。

 def main():
    n=int(input('n: '))
    k=0
    i=2
    sum=0

    while sum<=n:
        if is_prime(i):
            sum+=i
            i+=1
            k+=1
        print(k)



def is_prime(n):

    for divisor in range(2,int(n**0.5)+1):
        if n/divisor==int(n/divisor):
            return False
    return True

main()

非常感谢您提供一些指导。

我对代码进行了一些修改,并且工作正常,但是对这些代码评分的程序说,我几乎可以肯定应该在某些地方使用+号。 我不知道。 修改后的代码是:

while sum<=n:

        if is_prime(i):

            sum+=i
            k+=1
            i+=1
    print(k)

输出:

n:10

我:2

2

我:3

当它实际上应该达到i = 5且总计= 10时。

解决这个问题的实际上是更有效的方法,那就是Eratosthenes筛 基本思想是生成从2到n的数字数组。 然后,您从2开始遍历此数组并替换所有数字,将i == 0的mod替换为-1或将其删除。

如果您遇到困难,可以在此处检查实施。

Eratosthenes筛-寻找Prime Python

您当然应该使用的是运算符周围的空格字符。 另外,您的对齐方式古怪。 在Python中,对齐表示结构,您的重写将使所有解释器都抱怨(至少在此处显示)。 如果某个程序(或机械手TA)正在阅读和评分您的工作,并且认为您在某处需要一个+号,那么它可能希望在某处看到“ sum = sum + i”。 我会用的。 所以试试这个:

def main():
    n = int(input('n: '))
    k = 0
    i = 2
    sum = 0

    while sum <= n:
        if is_prime(i):
            sum = sum + i  # nothing wrong with "sum += i"
            k += 1
        i += 1    # put this inside "if" ==> loop forever 
    print(k)

def is_prime(m):
    for divisor in range(2, int(m**0.5) + 1):
        if m % divisor == 0:
            return False
    return True

main()
if n/divisor==int(n/divisor):

错了 当您将2个整数相除时,将得到整数。 因此5/2 =2。将其替换为

if n%divisor == 0:

编辑:您修改后的循环看起来几乎正确。 如果我了解您的任务正确,应该是

while sum<=n:
    if is_prime(i):
        sum+=i
        k+=1
    i+=1
print(k)

EDITED2:可能您希望在sum +下一个素数大于n之后立即停止而不添加另一个素数。

while True:
    if is_prime(i):
        if(sum + i > n)
            break;
        else:
            sum += i
            k += 1
    i += 1 
print(k)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM