题目需要思路创建一个长度为n的数组mylist,将数组的所有元素初始化为True,再创建一个数组res,用于保存素数数组。0的下标位置赋给了Fals,说明1不是质数。即遍历2-n个数,如果当前位置为True,则将当前元素追加到结果集中,并将数组mylist中所有当前元素的倍数设置为False,如果当前位置为False,xountine继续下一次循环结束,返回res的长度。核心代码:#初始化标记数组mylist=[True]*n#res用于存放素数res=[]#因为1不是素数,所以数组下标0的位置设置为Falsemylist[0]=False#遍历数1~nforiinrange(1,n):#如果标记该数是否为素数的值为False,则表示是某个数的倍数,直接继续ifmylist[i-1]isFalse:continue#IfitsTrueelse:#Appendthecurrentnumbertotheresultsetres.append(i)#遍历从当前数到末尾的数stepsize为当前数组,即所有当前数求倍数,然后将其数组的标记位置设置为Falseforjinrange(i,n,i):mylist[j-1]=False#返回保存素数的数组长度returnlen(res)完整代码:添加判断给定n值是否小于等于1类解决方案:defcountPrimes(self,n:int)->int:如果n<=1:return0mylist=[True]*nres=[]mylist[0]=Falseforiinrange(1,n):ifmylist[i-1]isFalse:continueelse:res.append(i)forjinrange(i,n,i):mylist[j-1]=Falsereturnlen(res)
