首页 > 解决方案 > 从Python中的列表中删除数字的倍数

问题描述

我是 Python 的新手,我正在开发一个找到数字的主要因素的程序。到目前为止,我的代码如下所示:

num = int(input('\nEnter a natural number greater than 1: '))
if num <= 1:
    while num <= 1:
        num = int(input('\nI said greater than 1: '))
if num == 2:
    print('\n', num, 'is a prime number.')
else:
    toggle = 0
    flist = []
    for i in range(2, num - 1):
        if num % i == 0:
            flist.append(i)
            toggle = 1
    if toggle == 0:
        print('\n', num, 'is a prime number.')
    if toggle == 1:
        print('\n', num, 'is not a prime number.')
        print('\nIt\'s prime factors are:', flist)

例如,输入 30 时,我得到以下输出:

Enter a natural number greater than 1: 30

30 is not a prime number.

It's prime factors are: [2, 3, 5, 6, 10, 15]

在这种情况下,主要因素是2, 3, 5。我怎样才能删除他们的倍数?谢谢你。

标签: pythonlist

解决方案


我会定义一个额外的函数来检查一个数字是否是素数

def is_prime(n):
    if n>1:
        for i in range(2,n):
            if (n % i)==0:
                return False
    return True

然后我会在你的代码中使用它来检查一个数字是否是素数,然后再将它添加到素数因子的最终列表中。

num = int(input('\nEnter a natural number greater than 1: '))
if num <= 1:
    while num <= 1:
        num = int(input('\nI said greater than 1: '))
if num == 2:
    print('\n', num, 'is a prime number.')
else:
    toggle = 0
    flist = []
    for i in range(2, num - 1):
        if num % i == 0:
            if is_prime(i):   # append only prime numbers
                flist.append(i)
            toggle = 1
    if toggle == 0:
        print('\n', num, 'is a prime number.')
    if toggle == 1:
        print('\n', num, 'is not a prime number.')
        print('\nIt\'s prime factors are:', flist)

这为您提供了正确的输出:

Enter a natural number greater than 1: 30

 30 is not a prime number.

It's prime factors are: [2, 3, 5]

推荐阅读