首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我用来过滤素数的函数是打印重复的,我该怎么解决这个问题呢?

我用来过滤素数的函数是打印重复的,我该怎么解决这个问题呢?
EN

Stack Overflow用户
提问于 2020-10-29 02:37:28
回答 6查看 67关注 0票数 1

这是我所拥有的。这个函数可以很好地过滤出复合数字,但我不明白为什么它会打印某些数字的重复项:

代码语言:javascript
复制
def prime_filter(list):
    prime_list = []
    for i in list:
        if i == 2:
            prime_list.append(i)
        if i > 1:
            for n in range(2, i):
                if(i % n == 0):
                    break
                else:
                    prime_list.append(i)
    print("The total number of prime numbers is: ", len(prime_list))
    print(prime_list)

下面是我对该函数及其返回的输出的测试:

代码语言:javascript
复制
# test
test_list = [2, 3, 6, 8, 11]
prime_filter(test_list)

The total number of prime numbers is:  11
[2, 3, 11, 11, 11, 11, 11, 11, 11, 11, 11]

有人知道我怎么解决这个问题吗?任何帮助都是非常感谢的。

EN

回答 6

Stack Overflow用户

发布于 2020-12-22 11:58:14

您应该检查prime_list是否被所有数字整除。

代码语言:javascript
复制
def prime_filter(list):
    prime_list = []
    for i in list:
        if i == 2:
            prime_list.append(i)
        if i > 2:
            for n in range(2, i):
                if(i % n == 0):
                    break
            else:
                prime_list.append(i)
                
    print("The total number of prime numbers is: ", len(prime_list))
    print(prime_list)
票数 2
EN

Stack Overflow用户

发布于 2020-10-29 02:41:48

这可能适用于解决方案,在完成所有检查后,应该将i添加到prime_list中。

代码语言:javascript
复制
def prime_filter(list):
    prime_list = []
    for i in list:
        if i == 2:
            prime_list.append(i)
        if i > 1:
            for n in range(2, i):
                if(i % n == 0):
                    break
                if n**2>i:
                    prime_list.append(i)
                    break
    print("The total number of prime numbers is: ", len(prime_list))
    print(prime_list)
票数 1
EN

Stack Overflow用户

发布于 2020-10-29 02:51:06

在您的i>1代码中,对于每个奇怪的i值,都被附加为odd no%2==1,这使得程序进入else部分。

此外,当使用for loop no value来划分i时,您只需要添加else部分。

以下是改进后的工作代码

代码语言:javascript
复制
def prime_filter(_list):
    prime_list = []
    for i in _list:
        if i == 2:
            prime_list.append(i)
        elif i==1:
            continue
        elif i > 2:
            for n in range(2, i):
                if(i % n == 0):
                    break
            else:
                prime_list.append(i)
    print("The total number of prime numbers is: ", len(prime_list))
    print(prime_list)

test_list = [2, 3, 6, 8, 11]
prime_filter(test_list)
# output [2,3,11]

how to check a no is prime or not

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64579285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档