检查范围内的数字是否为质数,如果不是,则返回所有因数

问题描述 投票:0回答:2

假设我们要查看range(2,10)。

我编写了以下代码:

for n in range(2,10):
    for x in range(2,n):
        if n%x == 0:
            print(n,'equals',x,'*',n//x)  
            break
    else:
        print(n, "is a prime number") 

以上方法可以正确检查,但也返回一个因素。

但是如果我替换break继续:

for n in range(2,10):
    for x in range(2,n):
        if n%x == 0:
            print(n,'equals',x,'*',n//x)  
            continue
    else:
        print(n, "is a prime number") 

无法再正确检查。那么,有什么更好的方法可以正确地同时检查和检查所有因素?您的回答将对我有很大帮助!

python for-loop break continue
2个回答
1
投票

不使用break或continue,而按如下方式制作和使用布尔变量prime

for n in range(2,10):
    prime = True
    for x in range(2, n):
        if n%x == 0:
            print(n,'equals',x,'*',n//x)  
            prime = False
    if prime:
        print(n, "is a prime number")

0
投票

另一种方法是维护每个值的因子列表,然后在最后输出所有因子:

for n in range(2, 20):
    factors = []
    for x in range(2, n):
        if n % x == 0:
            factors.append(str(x))
    if (len(factors)):
        print(str(n) + ' is not prime, factors are : ' + ','.join(factors))
    else:
        print(str(n) + ' is prime')

输出:

2 is prime
3 is prime
4 is not prime, factors are : 2
5 is prime
6 is not prime, factors are : 2,3
7 is prime
8 is not prime, factors are : 2,4
9 is not prime, factors are : 3
10 is not prime, factors are : 2,5
11 is prime
12 is not prime, factors are : 2,3,4,6
13 is prime
14 is not prime, factors are : 2,7
15 is not prime, factors are : 3,5
16 is not prime, factors are : 2,4,8
17 is prime
18 is not prime, factors are : 2,3,6,9
19 is prime
© www.soinside.com 2019 - 2024. All rights reserved.