首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python素数for-else范围

Python素数for-else范围
EN

Stack Overflow用户
提问于 2018-11-20 19:22:11
回答 2查看 225关注 0票数 0
代码语言:javascript
复制
lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,num):
           if (num % i) == 0:
               break
       else:
           print(num)

为什么这个代码打印"2“作为素数?(是的,但不应该打印)

2%2==0所以它应该跳过它.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-11-20 19:30:46

num为2时,range(2, num)为空,因此不执行if (num % i) == 0:检查,并执行else块。

票数 2
EN

Stack Overflow用户

发布于 2018-11-20 20:03:13

其他人注意到了range(start,end)代码中的错误。纠正这一点,您的素数代码可以重写为:

代码语言:javascript
复制
lower = int(input("from:"))
upper = int(input("to:"))
for num in range(lower,upper + 1):
   if num > 1:
       for i in range(2,max(num,3)):
           if (num % i) == 0:
               break
       else:
           print(num)

这不是让你记住素数的最快方法,每个潜在的质数都必须以每一个较小的数作为一个可能的除数来测试。相反,向上数并计算出较小数字的倍数要快得多。这样,我们只需要对每一个可能的除数做一次数学运算。

为了完整起见,这里有一个程序可以高效地生成素数(使用Eratosthenes方法的筛子)。

代码语言:javascript
复制
#### INPUTS    
lower = int(input("from:"))
upper = int(input("to:"))

### Code
n = upper
prime_booleans = [True for i in range(n+1)] 
p = 2
while (p * p <= n): 

    # Is current number a prime, eliminate the numbers that are multiples of it 
    if (prime_booleans[p] == True): 
        for i in range(p * 2, n+1, p): 
            prime_booleans[i] = False
    p += 1

# Print all prime numbers 
for p in range(lower, n): 
    if prime_booleans[p]: 
        print p, 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53400108

复制
相关文章

相似问题

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