我的代码是否适用于涉及素数跟踪和连续添加的问题?

时间:2017-12-05 14:20:03

标签: python primes

问题:假设函数is_prime的可用性。假设变量n已与正整数相关联。编写所需的语句,以便在超过n之前添加多少素数(以2开始并以递增的顺序连续更高的素数[2,3,5,7,11,13,...])。将此数字与变量k相关联。

代码:

def is_prime():
    i = 2
    k = 0
    Again = True
    while Again = True:
        if total > n:
            Again = False
        for x in range(2,n):
            if x % i == 0:
                total = total
                k = k
                i += 1
            else:
                total += x
                k += 1
    return k

1 个答案:

答案 0 :(得分:0)

对于涉及素数跟踪和连续添加的问题,您的代码不正确。也没有别的。显而易见的问题是它没有运行,所以它不正确。一个语法错误是:

while Again = True:

应该是:

while Again == True:

另一个原因是total在使用它的值之前从未初始化:

total += x

一旦我们解决了这些问题,您的代码似乎仍然不起作用。但是让我们稍微回顾一下。陈述的问题说,

  

假设函数is_prime的可用性。

但你没有这样做 - 你用名称is_prime()编写了你的​​解决方案。我们应该期望有一个名为is_prime(n)的函数,它会测试n是否为素数,返回TrueFalse。你得到这个,需要找一个,写一个,或者只是假设它存在但从未真正测试过你的代码。但是一旦你有这个功能,并且它有效,你就不应该改变它!

这是我的示例is_prime(n)功能:

def is_prime(n):
    """ Assume the availability of a function is_prime. """

    if n < 2:
        return False

    if n % 2 == 0:
        return n == 2

    for m in range(3, int(n ** 0.5) + 1, 2):
        if n % m == 0:
            return False

    return True

现在编写调用此函数的解决方案,但不更改此函数。这是一种可能的算法:

  • 编写一个名为primes_in_sum(n)

  • 的函数
  • 将变量prime设置为2,将变量k(我们的计数器)设置为 0

  • prime

  • 中减去n
  • n >= 0期间,增加k,并计算prime的下一个值 继续向prime添加一个,直到is_prime(prime)返回true。 然后再次从prime中减去n。回到这个循环的顶部。

  • while条件失败时,请返回k

通过输出一些值来测试您的代码:

for n in range(2, 100):
    # Assume a variable n has been associated with a positive integer
    print(n, primes_in_sum(n))

检查结果是否合理。