质数的python算法

时间:2014-02-06 05:38:52

标签: python

假设函数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

5

实际应该达到i = 5且总数= 10.

3 个答案:

答案 0 :(得分:2)

实际上解决这个问题的效率更高,它是 Eratosthenes的Sieve 。基本思想是生成从2到n的数字数组。然后从2开始迭代这个数组并用-1替换所有数字, mod by i == 0 或删除它们。

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

Sieve of Eratosthenes - Finding Primes Python

答案 1 :(得分:0)

你当然应该使用的是运营商周围的空间特征。此外,你的对齐是古怪的。在Python中,alignment表示结构,你的重写将使任何解释器都抱怨(至少,在这里显示)。 如果一个程序(或一个机器人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()

答案 2 :(得分:-1)

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 + next prime大于n并且不添加另一个prime值时立即停止。

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