如何用python筛选质数?

首先这里我能够用上的逻辑关系有:
如果…… 就……; 其余则……
即 if…… :…… ; else……

在练习时,我有尝试过找出100以内的质数

for x in range(0, 101):

在我看来成为质数的条件有二:
首先,它是大于1的自然数

for x in range(0, 101, 1):
if x > 1:
……
else:
print(“\n\t The number “ + str(x) + “ is eliminated. “)

再者,它除了1和它本身,再没有其他自然数是其因数

for x in range(0, 101, 1):
if x > 1:
if (x - (int(x / Factor) * Factor) == 0):
print(“\n\t “ + str(Factor) + “ is a factor of “ + str(x))
if ❤ (Factor == 1) or (Factor == x):
print(“\n\t “ + str(x) + “ is a prime number.”)

else:
print(“\n\t The number “ + str(x) + “ is eliminated. “)

但是很可惜,首先我并没有找到合适的办法将2-100这些数字存储在“Factor”依次代入循环中。其次,我缺乏一个逻辑判断的、适用于python的语句来代替红心的位置,来表示“只有…”

还要烦请大家多多指教,谢谢。

Jason990420
最佳答案

按你的代码来说, 只有1或本身, 如果以列表来记录, 那列表中只有两个元素, 也是说长度为 2.

for x in range(2, 101):
    factors = []
    for y in range(1, x+1):
        if x % y == 0:
            factors.append(y)
    if len(factors) == 2:
        print(f"{x} is a prime number.")
2 is a prime number.
3 is a prime number.
...
89 is a prime number.
97 is a prime number.
  • 1 不是质数, 所以就不处理了
  • 被除数, 可以不用从2到本身, 只使用质数更快.
  • 被除数还可以只考虑平方根以下的质数

以下代码, 不考虑1及本身, 所以列表的长度为 0.

import math

for x in range(2, 101):
    factors = []
    for y in range(2, int(math.sqrt(x))+1):
        if x % y == 0:
            factors.append(y)
    if len(factors) == 0:
        print(f"{x} is a prime number.")
3年前 评论
Jason990420 (作者) 3年前
Jason990420 (作者) 3年前
nizuitianla (楼主) 3年前
nizuitianla (楼主) 3年前
nizuitianla (楼主) 3年前
讨论数量: 3
pardon110

算法与数学相关

def prime(end):
    rs = [2]
    for v in range(3,end+1):
        b = True
        for p in rs:
            if v % p ==0:
                b = False
                break
        b and rs.append(v)
    return rs

rs = prime(100)
print(rs,len(rs))
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97] 25
3年前 评论
runstone 3年前
nizuitianla (楼主) 3年前
nizuitianla (楼主) 3年前
Jason990420

按你的代码来说, 只有1或本身, 如果以列表来记录, 那列表中只有两个元素, 也是说长度为 2.

for x in range(2, 101):
    factors = []
    for y in range(1, x+1):
        if x % y == 0:
            factors.append(y)
    if len(factors) == 2:
        print(f"{x} is a prime number.")
2 is a prime number.
3 is a prime number.
...
89 is a prime number.
97 is a prime number.
  • 1 不是质数, 所以就不处理了
  • 被除数, 可以不用从2到本身, 只使用质数更快.
  • 被除数还可以只考虑平方根以下的质数

以下代码, 不考虑1及本身, 所以列表的长度为 0.

import math

for x in range(2, 101):
    factors = []
    for y in range(2, int(math.sqrt(x))+1):
        if x % y == 0:
            factors.append(y)
    if len(factors) == 0:
        print(f"{x} is a prime number.")
3年前 评论
Jason990420 (作者) 3年前
Jason990420 (作者) 3年前
nizuitianla (楼主) 3年前
nizuitianla (楼主) 3年前
nizuitianla (楼主) 3年前
# practice.py
def prime_number(end_number: int) -> list:
    res_list: list = []

    for num in range(0, end_number + 1):
        if num == 0 or num == 1:
            continue
        else:
            if num == 2:
                res_list.append(num)
            else:
                for prime_num in res_list:
                    if num % prime_num == 0:
                        break
                else:
                    res_list.append(num)

    return res_list


print(prime_number(100))

#╰─○ python3 practice.py
# [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!