首页 > 解决方案 > 循环并查找复合/素数并将其保存到集合中

问题描述

我试图遍历一个值列表并找出每个数字是素数还是复合数,并将其保存在函数下的集合中。我遇到的问题是它没有找到任何东西,它只是在保存一个运行中的数字。例如,这个脚本只是保存从 1 到 19 的所有数字。我也明白它实际上并没有将值保存在一组中,但我会弄清楚的。大多数情况下需要帮助才能使值成为素数/复合值。

def prime(num):
    prime_set = set()
    composite_set = set()
    for i in range(2,num):
        if num % i == 0:
            composite_set.update([num])
        else:
            prime_set.update([num])
    return(prime_set)

for num in range(1,20):
    print(num,prime(num))

标签: python

解决方案


因为你的if/else挡住了,如果里面的任何一个数没有平分primenum都会被加进去。由于不均分,只要至少为 3,将始终添加到.prime_setrange(2,num)numnum-1numnumnumprime_set

您要做的只是在找不到任何除数num的情况下添加。prime_set对您的代码进行最简单的更改是。

def prime(num):
    prime_set = set()
    composite_set = set()
    for i in range(2,num):
        if num%i == 0:
            composite_set.add(num)
            break # You don't need to keep searching

    if not composite_set: # That is, it's empty.
        prime_set.add(num)

    return prime_set

推荐阅读