文章目录
- 题目描述
- 解法
- 思路
- 结果
- 查漏补缺
- 更新日期
- 参考来源
题目描述
简而言之就是,找一个.txt文件中质数的个数。
传送门
解法
# 读取文本数据
with open('primes.txt', 'r', encoding='utf-8') as f:data = f.read().split()# 将数据分为两组,一组大于10^8,另一组小于等于10^8
lst1 = [int(i) for i in data if len(i) <= 8]
lst2 = [int(i) for i in data if len(i) > 8]# 使用埃氏筛法找到小于等于10^8的所有质数,如果x是质数,那么大于 x 的 n 的倍数 2x,3x,… 一定不是质数
res = [] # 用于存储质数
ans = [True for _ in range(10**8+1)] # 一开始假设所有的数都是质数
for i in range(2, 10**8 + 1):if ans[i]:res.append(i)for j in range(i+i, 10**8 + 1, i):ans[j] = False# 求数组中质数的数量
# lst1中元素较多使用埃氏筛法寻找,lst2中元素较少,直接暴力寻找
count = 0
for i in lst1:if ans[i]:count += 1# 暴力循环寻找质数
flag = True
for i in lst2:for j in range(i+1, int(i**0.5) + 1):if i % j == 0:flag = Falsebreakif flag:count += 1flag = True
print(count)
思路
如果需要判断的元素较多可以通过建立埃氏筛来求解质数,如果元素数量较少则可以通过暴力求解来判断一个数是否为质数。
结果
通过
查漏补缺
需要掌握判断一个数是否为质数的两种方法:
1、埃氏筛法:如果x是质数,那么大于 x 的 n 的倍数 2x,3x,… 一定不是质数
2、暴力求解法:质数是一种因数只有1和它本身的数。
更新日期
2024.02.23
参考来源
蓝桥网