如何计算前n个素数?

tim*_*imy 0 primes

假设函数的可用性is_prime.假设变量n已与正整数相关联.写下计算前n个素数之和所需的语句.总和应与变量total相关联.

注意: is_prime取一个整数作为参数,True当且仅当该整数为素数时才返回.好吧,我写了这样的is_prime函数:

def is_prime(n):
    n = abs(n)
    i = 2
    while i < n:
        if n % i == 0:
            return False
        i += 1
    return True
Run Code Online (Sandbox Code Playgroud)

但它的工作原理除了n == 0.如何修复它以使其适用于每个整数?我试图找到如何编写函数以获得前n个素数之和以及如何修改我的is_prime函数的答案,这应该适用于所有可能的输入,而不仅仅是正数.

pax*_*blo 5

您的任务如下.

假设函数is_prime的可用性.假设变量n已与正整数相关联.写下计算前n个素数之和所需的语句.总和应与变量total相关联.

正如NVRAM在评论中正确指出的那样(并没有其他人似乎已经接受),问题陈述"假设一个函数的可用性is_prime".

你不具备编写功能.什么你必须做的是"写来计算前n个素数的和所需要的报表".

伪代码就像这样:

primes_left = n
curr_num = 2
curr_sum = 0
while primes_left > 0:
    if is_prime(curr_num):
        curr_sum = curr_sum + curr_num
        primes_left = primes_left - 1
    curr_num = curr_num + 1
print "Sum of first " + n + " primes is " + curr_sum
Run Code Online (Sandbox Code Playgroud)

我想你会发现,如果你只是用你选择的语言实现那个伪代码,那就完全是你所要做的.

如果你正在寻找一个is_prime测试你的作业的实现,它的效率并不重要,因为你只会测试一些小的值.考虑到将使用它的代码的限制,您也不必担心少于两个的数字.像这样的东西是完全可以接受的:

def is_prime(num):
    if num < 2:
        return false
    if num == 2:
        return true
    divisor = 2
    while divisor * divisor <= num:
        if num % divisor == 0:
            return false
        divisor = divisor + 1
    return true
Run Code Online (Sandbox Code Playgroud)