defcountPrimes(n:int):
count=0for i inrange(2,n):
if (isPrimes(i)):
count+=1return count
defisPrimes(n:int):
for i inrange(2,n):
if n%i==0:#如果这个数从2开始到自己都没有一个是倍数,则是素数returnFalsereturnTrueif __name__ == "__main__":
n=int(input())
print(countPrimes(n))
import math
defcountPrimes(n:int):
count=0for i inrange(2,n):
if (isPrimes1(i)):
count+=1return count
defisPrimes1(n:int):
for i inrange(2,int(math.sqrt(n))+1):
if n%i==0:#如果这个数从2开始到自己都没有一个是倍数,则是素数returnFalsereturnTrueif __name__ == "__main__":
n=int(input())
print(countPrimes(n))
时间复杂度o(sqrt(n))
埃拉托斯特尼素数筛选法
先初始化数组全为True,然后把是素数的倍数全部删去,最后统计数组中是True的个数返回
import math
defcountPrimes1(n: int) -> int:
isPrime = [Truefor i inrange(n)] # 初始化数组为全 True,表示所有数都是质数for i inrange(2, int(math.sqrt(n)) + 1):#乘法因子的对称性if isPrime[i]:#是素数的情况下,把他的倍数全部删去for j inrange(i*i, n, i):#从i*i开始,到n以i为步长,都是i的倍数,全置为False
isPrime[j] = False
count = 0for i inrange(2, n):
if isPrime[i]:#统计isPrime数组中是ture的个数
count += 1return count
if __name__ == "__main__":
n=int(input())
print(countPrimes1(n))
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!