python获取质数
质数概念
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
题目
统计所有小于非负整数 n
的质数。
代码
# -*- coding: utf-8 -*-
'''
质数概念:只能被1和自身整除的数字,叫做质数
'''
import math
import time
class Solution:
''' 暴力的方法,将其对每一个比其小的数进行取余运算
如果任一余数为0。则一定不是质数,否则就是质数。(数字1除外)
'''
def getPrimes(self, n: int) -> list:
Primes_list = []
for i in range(2, n+1):
sign = True
for j in range(2, i):
if i % j == 0:
sign = False
break
if sign:
Primes_list.append(i)
return Primes_list
'''
优化暴力方法,我们可以发现,假如一个数为 9 ,那么其二分之一(4.5)后的数都可以不用进行计算,
因为肯定是有余的 。事实上情况会比这更好一些:对正整数 n ,如果用 2 到 √n 之间(包含边界)的
所有整数去除,均无法整除,则 n 为质数。
'''
def getPrimes2(self, n: int) -> list:
Primes_list = []
for i in range(2, n+1):
sign = True
for j in range(2, int(math.sqrt(i))+1):
if i % j == 0:
sign = False
break
if sign:
Primes_list.append(i)
return Primes_list
'''
如果 x 是质数,那么大于 x 的 x 的倍数 2x,3x,...一定不是质数。
因此,可以进行将质数标记为1,非质数标记为0.
'''
def getPrimes3(self, n: int) -> list:
isPrimes = n*[1]
Primes_list = []
for i in range(2, n+1):
if isPrimes[i-1]:
Primes_list.append(i)
for j in range(i*i,n+1,i):
isPrimes[j-1]=0
return Primes_list
if __name__ == "__main__":
s = Solution()
time1 = time.time()
result = s.getPrimes(10000)
print(len(result), time.time()-time1)
time2 = time.time()
result2 = s.getPrimes2(10000)
print(len(result2), time.time()-time2)
time3 = time.time()
result3 = s.getPrimes3(10000)
print(len(result3), time.time()-time3)
结果
1229 0.2709805965423584
1229 0.007999658584594727
1229 0.001996278762817383
不论你在什么时候开始,重要的是开始之后就不要停止。
不论你在什么时候结束,重要的是结束之后就不要悔恨。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律